编辑原始问题,因为我想问问题std::map
,而不是std::vector
.我的错.抱歉.
我的数据实际上是2 std::map
秒.我想将两张地图合并到第三张地图中.
我的第一张和第二张地图包含具有相同键的条目.所以我想将这些键下的数据合并到我生成的第3张地图中.
所以如果我使用std::merge
,我会丢失第一个或第二个地图常用条目中的数据吗?正如我所提到的,两张地图都有共同的数据(值)?
如果vector
s(或其他顺序容器如list
or deque
)被排序,那么你可以使用std::set_union
.std::merge
如果您想保存重复项,则有一个
从链接页面获取的代码:
#include#include #include #include int main() { std::vector v1 = {1, 2, 3, 4, 5}; std::vector v2 = { 3, 4, 5, 6, 7}; std::vector dest1; std::set_union(v1.begin(), v1.end(), v2.begin(), v2.end(), std::back_inserter(dest1)); for (const auto &i : dest1) { std::cout << i << ' '; } std::cout << '\n'; }
输出:1 2 3 4 5 6 7
您可以使用方法向map
(或set
它们的无序对应物)添加唯一键insert
.任何在原始地图已经存在的键不会被替换(在multiset
和multimap
重复键将被添加,使用set_union
,如果这应该避免讨论过).
映射示例(忽略具有重复键的条目):
#include
输出(第一个数字是关键,第二个 - 它来自哪个地图):1:1 2:1 3:1 4:1 5:1 6:2 7:2
如果你切换地图(设置dest1
为v2
开头和inser值的副本v1
),那么输出将是:1:1 2:1 3:2 4:2 5:2 6:2 7:2
多映射的示例(保留两个映射的条目):
#include
输出:1:1 2:1 3:1 3:2 4:1 4:2 5:1 5:2 6:2 7:2
请注意,您不能使用multimap
与使用地图完全相同的方式.例如,operator[]
是不成功的.您将需要使用insert
添加条目,并使用lower_bound
或equal_range
成员函数来提取条目.