在下面的代码中,有类Tile
和TQ
,Tile
的集合,其中我使用结构tCmp_id
来比较集合元素。mkTile
简单地返回一个给定id值的Tile
对象。在main中,我向TQ
添加了四个元素:4个图块,ID分别为1、2、4和5。
我还在TQ
上调用了upper_bound
和lower_bound
,它们应该分别给予2和4,但是,在我运行程序时,我得到的输出分别是4和4,代码如下:
#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
,但到目前为止什么都不起作用。提前感谢
1条答案
按热度按时间ogq8wdun1#
std::set::lower_bound
-返回一个迭代器,指向第一个不小于(即大于或等于)key的元素。std::set::upper_bound
-返回一个迭代器,指向第一个大于key的元素。由于使用
3
作为要搜索的键,因此在两种情况下都将得到4
。对于
lower_bound
,4
是不小于3的第一个值,即它大于或等于3
。对于
upper_bound
,4
是第一个大于3
的值。