gpt4 book ai didi

c++ - std::lower_bound 中使用的比较运算符

转载 作者:行者123 更新时间:2023-11-30 03:52:45 38 4
gpt4 key购买 nike

我的编译器拒绝编译这个简单的代码:

struct mystruct{
int x;
bool operator<(const mystruct& y) const{ return x < y.x; }
};


std::map<mystruct, int> test;
auto it = std::lower_bound(test.begin(), test.end(), mystruct{2});

我遇到了错误

error C2893: Failed to specialize function template 'unknown-type std::less<void>::operator ()(_Ty1 &&,_Ty2 &&) const'

查看this链接,看来您只需要定义一个常量比较运算符,这正是我正在做的。我在这里缺少什么吗?

最佳答案

问题是你的 map 的值类型是std::pair<const mystruct, int> ,等等 std::lower_bound正在尝试比较 mystructstd::pair<const mystruct, int> .并且没有为此定义运算符。

你不应该使用 std::lower_boundstd::map 上反正。它将在 O(n) 中工作,因为映射没有随机访问迭代器。 std::map有自己的lower_bound成员函数将利用树结构为您提供 O(log n) 的结果。

auto it = test.lower_bound(mystruct{2});

关于c++ - std::lower_bound 中使用的比较运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30496881/

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