gpt4 book ai didi

c++ - 将 multimap 的子集复制到新的 multimap

转载 作者:行者123 更新时间:2023-11-30 05:46:05 27 4
gpt4 key购买 nike

// this has data from elsewhere, just showing its the same type
multimap<string,string> map_with_data;
string string_key = "some_string";

// not working:
multimap<string,string> new_map;

new_map = map_with_data[string_key];

我想要返回一个只包含 key 对的多重映射, key 对为 string_key .这样做的正确方法是什么,或者这种直接复制的方法是否可行?

我得到:error: no match for ‘operator[]’ (operand types are ‘std::multimap<std::basic_string<char>, std::basic_string<char> >’ and ‘std::string {aka std::basic_string<char>}’)|

最佳答案

像下面这样的东西将是我的第一选择:

auto r = map_with_data.equal_range(string_key);

multimap<string, string> new_map(r.first, r.second);

这会找到现有 map 中具有指定键的所有项目,然后从这些迭代器初始化新 map 。如果现有 map 中没有包含该键的项目,您将获得 r.first 和 r.second 的 map_with_data.end(),因此您的 new_map 将最终为空(如您所料)。

如果您真的想要,您可以使用lower_boundupper_bound 而不是equal_range:

multimap<string, string> new_map {
map_with_data.lower_bound(string_key),
map_with_data.upper_bound(string_key) };

不过我更喜欢使用 equal_range 的代码。

演示代码:

#include <map>
#include <string>
#include <iostream>
#include <iterator>

using namespace std;

namespace std {
ostream &operator<<(ostream &os, pair<string, string> const &p) {
return os << "(" << p.first << ", " << p.second << ")";
}
}

int main() {

multimap<string, string> map_with_data {
{"A", "B"},
{"A", "C"},
{"B", "B"},
{"B", "C"}
};

auto r = map_with_data.equal_range("A");

multimap<string, string> new_map(r.first, r.second);

copy(new_map.begin(), new_map.end(),
ostream_iterator<pair<string, string>>(std::cout, "\n"));
}

结果:

(A, B)
(A, C)

关于c++ - 将 multimap 的子集复制到新的 multimap ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29108142/

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