我如何构造一个 std::map<std::string, Foo>
来自std::vector<std::pair<std::string, Foo> >
? std::map 似乎可以从输入迭代器构造。
更新
顺便说一句,在将 vector 添加到 map 时,我需要将 vector 中的字符串转换为小写形式。这是因为我希望使用 map 来获取 vector 中内容的排序版本。
最佳答案
每个标准库容器都可以从迭代器范围构造。在你的情况下:
std::map<std::string, Foo> mymap(myvector.begin(), myvector.end());
如果您想添加字符串的小写 版本,您需要通过转换迭代器传递这些值。不幸的是,这并没有包含在标准 C++ 中,但实现起来相当简单。 Boost also includes a version :
// Make the pair's key lower-case
std::pair<std::string, Foo> make_lower(std::pair<std::string, Foo> x) {
std::transform(x.first.begin(), x.first.end(), x.first.begin(), ::tolower);
return x;
}
std::map<std::string, int> mymap(
boost::make_transform_iterator(myvector.begin(), make_lower),
boost::make_transform_iterator(myvector.end(), make_lower));
关于c++ - 从 std::vector<std::pair<T,U>> 构造一个 std::map<T,U>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18588870/