已解决
std::map使用自定义的数据结构当做key
来自网友在路上 176876提问 提问时间:2023-11-19 04:34:24阅读次数: 76
最佳答案 问答题库768位专家为你答疑解惑
一、std::map
是按照键的顺序进行排序的,因此需要定义结构类型的比较运算符。通常情况下,你可以通过重载结构类型的小于运算符<
来定义比较逻辑。
#include <map>class CKey {
public:CKey(int a) { m_a = a; }~CKey() = default;//也可以在外部(二选一)bool operator< (const CKey &k1) const{return this->v() < k1.v();}int v() const { return m_a; }private:int m_a;
};//也可以在外部(二选一)
bool operator< (const CKey &k1, const CKey &k2)
{return k1.v() < k2.v();
}std::map<CKey, int> map;
map.emplace(CKey(1), 1);
map.emplace(CKey(2), 2);
二、如果你无法修改自定义结构类型的定义或不希望修改默认的比较逻辑,你可以使用第三个模板参数来指定自定义的比较函数。比较函数应该接受两个参数,并返回一个布尔值指示它们的相对顺序。
#include <map>class CKey {
public:CKey(int a) { m_a = a; }~CKey() = default;int v() const { return m_a; }private:int m_a;
};//自定义比较
struct color_cmp
{bool operator() (const CKey &k1, const CKey &k2) const{return k1.v() < k2.v();}
};//通过第三个模板参数
std::map<CKey, int, color_cmp> map;
map.emplace(CKey(1), 1);
map.emplace(CKey(2), 2);
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"std::map使用自定义的数据结构当做key":http://eshow365.cn/6-38909-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: zyj-ha 安装过程及使用部署
- 下一篇: cesium雷达效果(脉冲圆)