C++ 标准设置插入不"working"
c++ std set insert not "working"
我在std集上遇到了一些问题。我知道它不允许插入重复的元素,而且(我认为(我的代码并没有试图插入重复的元件。但似乎这个集合并没有同时插入这两个元素。问题出在哪里?该系列考虑的两个元素是否相等?为什么?
#include <bits/stdc++.h>
using namespace std;
struct sam{
double a,b, tam;
sam(){
}
sam(double a1, double b1){
a = a1;
b = b1;
tam = b - a;
}
bool operator<(const sam &p) const{
return tam > p.tam;
}
};
set<sam> ssw;
int main(void){
ssw.insert(sam(0,2));
ssw.insert(sam(4,6));
cout<<ssw.size()<<"n"; // prints "1"
return 0;
}
在std::set
中
用不精确的术语来说,两个对象a和b被认为是等价的(而不是唯一(,如果两者的比较都小于另一个:!comp(a,b(&;!comp(b,a(
在您的情况下,bool operator<
不满足上述条件,因此集合不处理unique
。
对于这两个对象,tam
的值都是2.0。由于operator<
函数使用该值,因此这两个对象被认为是相等的。
顺便说一句,使用浮点数来比较两个对象不是一个好主意。由于浮点表示方式的不精确性,您可能会得到意外的结果。
当前比较器为两个插入返回相同的值。因此,只有一个项目被成功插入。另一个只是重复,因此被忽略。
也许你的意思是:
bool operator<(const sam &p) const{
return ( (a > p.a) || (b > p.b) || (tam > p.tam) );
}
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 预处理器:插入结构名称中的前一个行号
- 在未初始化映射的情况下,将值插入到映射的映射中
- 如何在c++中只将键插入到bimap的一侧
- 如何将结构插入到集合中并打印集合的成员
- C++json插入数组
- Visual Studio 2019:插入多个C++风格的单行注释
- nlohmann-json将一个数组插入到另一个数组中
- 有效地使用std::unordered_map来插入或增加键的值
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- 正在插入动态数组
- 插入或删除时获取usb的dos_name
- 叮叮当当在修复时插入多个"覆盖"说明符
- 链表c++插入,所有情况都已检查,但没有任何工作
- 将重物插入std::map
- C++17 - 使用自定义分配器的节点提取/重新插入 - 适用于 clang++/libc++,但不适用于 libstd
- 在数字之间插入 + 或 - 符号以使其等于整数
- 在字符串中插入空格
- C++ 标准设置插入不"working"