gpt4 book ai didi

c++ - 如何合并 2 个 std::maps,并在第 3 个映射中输出结果

转载 作者:可可西里 更新时间:2023-11-01 18:17:05 33 4
gpt4 key购买 nike

编辑原始问题,因为我想问有关 std::map 的问题,而不是 std::vector。我的错。对不起。

我的数据实际上在 2 个 std::map 中。我想将这两张 map 合并成第三张 map 。

我的第一张和第二张 map 包含具有相同键的条目。所以我也想将这些键下的数据合并到我生成的第三张 map 中。

因此,如果我使用 std::merge,我是否会丢失第一个或第二个映射公共(public)条目中的数据?正如我所提到的,两个 map 中都有共同的数据(值)?

最佳答案

顺序容器的信息

如果 vector(或其他顺序容器,如 listdeque)已排序,则可以使用 std::set_union .有一个 std::merge , 以防你想保存重复项

从链接页面获取的代码:

#include <vector>
#include <iostream>
#include <algorithm>
#include <iterator>

int main()
{
std::vector<int> v1 = {1, 2, 3, 4, 5};
std::vector<int> v2 = { 3, 4, 5, 6, 7};
std::vector<int> 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

关联容器的信息

您可以使用insert 方法将唯一键添加到map(或set 及其无序对应项)。原始 map 中已经存在的任何键都不会被替换(在 multisetmultimap 中将添加重复键,如果这应该使用之前讨论过的 set_union避免)。

map 示例(忽略具有重复键的条目):

#include <map>
#include <iostream>

int main()
{
std::map<int, int> v1 = {{1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}};
std::map<int, int> v2 = { {3, 2}, {4, 2}, {5, 2}, {6, 2}, {7, 2}};
std::map<int, int> dest1 = v1;

dest1.insert(v2.begin(), v2.end());

for (const auto &i : dest1) {
std::cout << i.first << ':' << i.second << ' ';
}
std::cout << '\n';
}

输出(第一个数字是关键,第二个 - 它来自哪个 map ):1:1 2:1 3:1 4:1 5:1 6:2 7:2

如果你切换映射(将 dest1 设置为开头的 v2 的拷贝并插入 v1 的值),则输出将是:1:1 2:1 3:2 4:2 5:2 6:2 7:2

多 map 示例(保留两个 map 的条目):

#include <map>
#include <iostream>

int main()
{
std::map<int, int> v1 = {{1, 1}, {2, 1}, {3, 1}, {4, 1}, {5, 1}};
std::map<int, int> v2 = { {3, 2}, {4, 2}, {5, 2}, {6, 2}, {7, 2}};
std::multimap<int, int> dest1 {v1.begin(), v1.end()};

dest1.insert(v2.begin(), v2.end());

for (const auto &i : dest1) {
std::cout << i.first << ':' << i.second << ' ';
}
std::cout << '\n';
}

输出:1:1 2:1 3:1 3:2 4:1 4:2 5:1 5:2 6:2 7:2

请注意,您不能像使用 map 那样使用 multimap。例如,operator[] 是不可用的。您将需要使用 insert 来添加条目,并使用 lower_boundequal_range 成员函数来提取条目。

关于c++ - 如何合并 2 个 std::maps,并在第 3 个映射中输出结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34340465/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com