我需要实现两个嵌套映射,并为内部映射定制一个比较器。
我有:
struct Rank {
Rank() = default;
int rank = 0;
bool condition = false;
};
和比较器
struct compareRank {
bool operator()(const Rank& lhs, const Rank& rhs) const {
return lhs.rank < rhs.rank;
}
};
在我的 main()
函数中,我声明:
map<int, map<string, Rank, compareRank>> db;
这背后的想法如下:内部 map
应按其等级对其字符串进行排序。
但是,当我尝试这样做时:
db[3]["hello"] = Rank();
编译说:
no matching function for call to object of type 'const compareRank'
我不知道怎么解决。
最佳答案
std::map
是一个基于 key 的容器。这意味着它对键进行排序,而不是对值进行排序。 compareRank
需要 Rank
本地图试图对 std::string
进行排序时键。
如果您不需要 std::string
key 那么你可以考虑 std::set<Rank>
.
如果您需要同时拥有 std::string
和 Rank
作为 key ,您可以使用 boost::bimap
关于c++ - 如何将比较器传递给内部 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49631868/