从两个地图创建set_difference矢量
Create a set_difference vector from two maps
目前我正在获得两张地图的集合差,然后遍历生成的地图。
理想情况下,我想创建一个差异向量而不是地图。这样我就可以更有效地迭代。
typedef std::map<int, Info> RegistrationMap;
RegistrationMap redundantRegs;
std::set_difference(map1.begin(), map1.end(), map2.begin(), map2.end(),
std::inserter(redundantRegs, redundantRegs.begin()),
[](const std::pair<int, Info> &p1, const std::pair<int, Info> &p2 {return p1.first < p2.first;});
for (auto reg : redundantRegs)
{
map2[hiu.first].Status = "delete";
}
您将如何创建集合差的向量?这可以在set_difference函数中完成吗?
我正在寻找最有效的方法来获得差异。
std::set_difference
可以将其输出写入任何输出迭代器,因此将输出写入向量没有问题:
std::vector<std::pair<int, Info>> redundantRegs;
std::set_difference(map1.begin(), map1.end(), map2.begin(), map2.end(),
std::back_inserter(redundantRegs),
...);
(注意:在比较器中,将std::pair<int, Info>
更改为std::pair<const int, Info>
以避免不必要的副本。
您可以使用std::set_difference
但与其使用std::inserter
不如使用std::back_inserter
,因为这在std::vector
上最有效,并相应地创建std::vector
:
std::vector<RegistrationMap::value_type> redundantRegs;;
std::set_difference(map1.begin(), map1.end(), map2.begin(), map2.end(),
std::back_inserter(redundantRegs) );
注意:以您编写的方式,您不需要显式编写比较器,默认比较器就可以了。如果不使用默认的,最好使用 std::map::value_comp()
从std::map
获取它,而不是显式编写它,因为排序标准必须与 map 和 std::set_difference
匹配:
std::set_difference(map1.begin(), map1.end(), map2.begin(), map2.end(),
std::back_inserter(redundantRegs),
map1.value_comp() );
现场示例
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何为 Set 创建运算符 []?
- 创建 std::set 只复制一个元素,如何解决这个问题?
- 模板化的使用是否为具有自定义键的unordered_map/set创建了一个良好的模式
- 在C#中创建一个STL std::set并封送到C++
- 迭代 std::set 会创建临时
- 创建string+int set stl类型
- 使用标准c++库vector作为底层实现创建Set模板类
- 如何在C++中创建带有自定义比较器的std::set