gpt4 book ai didi

c++ - 为什么 map 需要实现 'operator<',然后如何比较对象?

转载 作者:行者123 更新时间:2023-11-28 04:04:47 25 4
gpt4 key购买 nike

所以 map 需要你实现 operator <如果您想使用自定义对象作为键。

struct example{
example( int id, String stuff);
int id;
String stuff;
bool operator<( const example& rhs ) const;
}

bool example::operator<( const example& rhs ) const
{
if( id< rhs.id ) return true;
if( rhs.id< id) return false;
if( stuff< rhs.stuff) return true;
if( rhs.stuff< stuff) return false;
return false;
}

从我看到的例子(见讨论:Why std::map overloaded operator < does not use the Compare)只返回true如果lhs < rhs ...

  1. 为什么 map 要求您实现 <运算符(operator)?是不是因为 maps 在后台进行二进制搜索以查找键是否匹配?
  2. 即使它在进行二分查找,它仍然需要比较最后的对象是否相等,对吗?
example example1 = example(1,"a");
example example2 = example(2,"b");

map<example, String> mymap;
mymap.insert({example1,"hello"});
mymap.insert({example2,"world"});

cout << mymap[example(1,"a")] << endl;

它从不要求执行 operator=那么它怎么知道我创建的新对象与 map 的第一个条目相同。它会打印“你好”吗?

最佳答案

它将值存储在平衡二叉树中,red black tree像往常一样,所以这棵树需要比较运算符

还请记住,如果 a < b == falseb < a == false认为a等于b

关于c++ - 为什么 map 需要实现 'operator<',然后如何比较对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58932813/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com