提问人:codexistent 提问时间:1/4/2023 最后编辑:codexistent 更新时间:1/4/2023 访问量:84
C++ std::set 带有自定义类返回错误的lower_bound值
C++ std::set With Custom Class Returning Wrong lower_bound Value
问:
在下面的代码中,有 class 和 ,是一组 s,我使用结构来比较其中的集合元素。 只需返回给定 ID 值的对象。
在主体上,我添加了四个元素:4 个图块,id 为 1、2、4 和 5。Tile
TQ
Tile
tCmp_id
mkTile
Tile
TQ
我还调用 和 on ,它们应该分别给出 2 和 4。但是,在我运行程序时,我分别得到 4 和 4 作为输出。
代码如下:upper_bound
lower_bound
TQ
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
using namespace std;
class Tile {
public:
int id;
};
struct tCmp_id {
bool operator()(Tile a, Tile b) const {
return a.id < b.id;
}
};
set<Tile, tCmp_id> TQ;
Tile mkTile(int id){
Tile t;
t.id = id;
return t;
}
int main(){
TQ.insert(mkTile(1));
TQ.insert(mkTile(2));
TQ.insert(mkTile(4));
TQ.insert(mkTile(5));
cout << (*TQ.lower_bound(mkTile(3))).id << endl;
cout << (*TQ.upper_bound(mkTile(3))).id << endl;
}
有人可以解释一下这是怎么回事吗?我尝试过在线搜索或编辑,但到目前为止没有任何效果。提前致谢tCmp_id
答:
4赞
Ted Lyngmo
1/4/2023
#1
std::set::lower_bound
- 返回一个迭代器,指向第一个不小于(即大于或等于)键的元素。
std::set::upper_bound
- 返回一个迭代器,指向第一个大于 key 的元素。
由于您用作搜索的密钥,因此您将在这两种情况下都获得。3
4
for 是第一个不小于 3 的值,即它大于或等于 。lower_bound
4
3
For 是第一个大于 的值。upper_bound
4
3
评论
set<int>