一组结构缺少元素
Set of Structs Missing an Element
#include <bits/stdc++.h>
using namespace std;
int dist[2];
struct cmp {
bool operator() (const int &a, const int &b) {
return dist[a] < dist[b];
}
};
set<int, cmp> s;
int main() {
dist[0] = 2;
dist[1] = 2;
s.insert(1);
s.insert(0);
for(set<int>::iterator it = s.begin(); it != s.end(); ++it) {
cout << *it << " " << dist[*it] << endl;
}
}
上述代码输出:
1 2
为什么这是真的?应该不输出:
1 2
0 2
谢谢!
std::set
仅包含每个 unique 对象的一个副本。当您尝试插入弱排序下等效的两个对象时,对象被确定为不是唯一的,并且只有第一个对象保留在容器中。
在您的代码中,由于比较器的定义,0
和1
在弱排序下等效。那就是:
dist[0] = 2;
dist[1] = 2;
cmp compare;
bool res1 = compare(0, 1); //false
bool res2 = compare(1, 0); //false
当两个方向上的比较都是错误的时,两个对象被认为是等效的。
中只有第一个插入的第一个。使用std::multiset
允许重复。
相关文章:
- 使用不带参数的函数访问结构元素
- 带结构的二维矢量:如何存储元素
- 访问类lintalizer列表中的结构元素
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 设计将引用元素移动到开头的数据结构.C++
- 结构元素名称要 cout?
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- 从指向结构数组的指针中提取元素
- 继承层次结构并将元素添加到向量
- 在集合中查找使用结构C++的元素
- C++结构元素(成员变量)的数量
- 无法在 Mosquitto MQTT Broker 插件上访问结构体 mosquitto 的元素
- 在C++中更改结构内部元素的方法?
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 如何为结构的数据元素赋值
- 如何使用矢量元素将项目添加到结构中?
- 获取结构 c++ 中元素的索引
- C++ STL 数据结构常时按索引推送/弹出/随机访问,并具有指向元素的可靠指针
- 指向结构的指针向量的元素具有相同的地址
- 为什么将函数的返回类型从结构节点*更改为void后,链表的元素没有显示create_ll和显示?