std::使用自定义类型设置差异
std::set difference with self defined type
我已经定义了自己的结构,例如
struct element {
int id;
float value;
}
我正在std::set
使用它.我想使用 set_difference
算法(如上一个问题中已经提到的(来确定两组的差值。当我尝试调用代码时,编译停止并显示以下错误消息:
/usr/include/c++/4.2.1/bits/stl_algobase.h:268: error: passing
'const element' as 'this' argument of 'element& element::operator=(const element&)'
discards qualifiers
一个最小的示例可能如下所示:
std::set<struct element> s1;
std::set<struct element> s2;
std::set<struct element> s3;
element e1 = { 1, 11.0 };
element e2 = { 2, 22.0 };
element e3 = { 3, 33.0 };
s1.insert(e1);
s1.insert(e2);
s2.insert(e2);
s2.insert(e3);
set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(), s3.begin());
set_difference(s1.begin(), s1.end(), s2.begin(), s2.end(),
std::inserter(s3, s3.begin()));
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
示例:http://ideone.com/B4Cc1
通过将s3.begin()
作为输出迭代器,这意味着您希望用集合差覆盖集合的前部区域。覆盖要求集合的大小大于结果,这在大多数时候显然不是真的;即使集合不为空,也不能使用 s3.begin()
作为输出,因为迭代器是只读的(否则会破坏排序顺序(。
OTOH,std::inserter(x, cit)
的意思是,每当分配此输出迭代器(*it = y
(,插入方法将被调用(x.insert(cit, y)
(,这才是您真正想要的:从空填充一个集合。
相关文章:
- C++(和 ROS) - 包含与前向声明引用,设置默认值和类型定义
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- Poco 库 PUT 方法未按预期工作,尽管主机、方法、内容类型设置正确
- 无法在 HEVC 解码器上设置输出类型 IMFTransform
- Visual Studio 2019 - 设置文件类型的默认扩展名
- 无法在VSCode中设置C++调试;无法识别调试类型
- 将变量设置为类型模板
- 在 C++ 中设置的用户定义数据类型
- 错误:为什么"void*"不是指向对象的指针类型,即使指针设置为对象?
- 为自定义路径类型设置提升property_tree
- 无法将结构类型的标识符设置为 nullptr;
- 空向量占用的空间是否与指向当前设置为 nullptr 的类型的指针一样多
- C++:无法在按位函数后将 int 类型设置为非标量
- 提升区域设置不完整类型boundary_indexing<char32_t>
- 如何用C 中的设置类型解释该方法
- 为 vardiac 和普通模板设置类型名称默认值
- 使用 SWIG 在重载C++方法中设置类型
- 如何动态设置类型
- 如何使用 std::conditional 根据模板参数类型设置类型
- Boost变量:我如何做一个返回已设置类型的访问者