【发布时间】:2020-02-06 15:13:21
【问题描述】:
我试图使用自定义比较器按值排序地图,但我无法弄清楚为什么我一直收到“没有匹配的 compareByVal 调用”的错误
这是我在 main.cpp 中的内容:
#include <map>
#include <iostream>
struct compareByVal {
bool operator[](const std::pair<int,int> & a, const std::pair<int,int> & b)
return a.second < b.second;
}
int main() {
std::map<int,int,compareByVal> hash;
hash[1] = 5;
hash[2] = 2;
hash[3] = 10;
std::cout << hash.begin()->first << std::endl;
}
【问题讨论】:
-
因为它不关心值。它只会传递密钥。除非您制作自己的自定义地图,否则您无法按值排序。或者,你知道,只是让价值成为关键?在您的示例中,
hash[1] = 5实际上插入了{1,0},然后在分配之后将0更改为5。你会如何排序? -
operator[]应该是operator() -
地图基本上是按键排序的。您可以通过比较器更改这些键的排序方式,但顺序必须基于键。编辑:如果您想按值排序并查找键,您可能想要交换您认为的键和您认为的值。
-
恕我直言,如果要按键和按值排序,请使用
std::vector和两个映射。第一个映射将是,第二个映射将是 。这是一种数据库技术:一个表和一个或多个索引表中的所有数据。 -
我试图使用自定义比较器按值排序 -- 听起来像XY Problem。你真正想解决什么问题?
标签: c++ dictionary comparator