迭代 unordered_map 个向量
Iterating over unordered_map of vectors
我知道这是一些基本的东西,但我无法设法遍历 std::vectors
的 unordered_map
并打印每个向量的内容。我的 unordered_map
看起来像这样:
std::unordered_map<std::string, std::vector<int> > _dict;
现在我可以打印地图的 first
属性:
for (auto &it : _dict)
{
std::cout << it.first <<std::endl;
}
但是在尝试打印 second
属性时出现错误。有谁知道我怎么能做到这一点?谢谢!
您可以使用 range-for loop
打印 std::vector <int>
的内容:
for(auto it : _dict){
std::cout << it.first << ": ";
for(int item : it.second){
std::cout << item << " ";
}
std::cout << std::endl;
}
您必须为向量使用内部循环。
string只有一个元素,可以直接打印,vector是元素的集合,按理说需要循环打印其内容:
std::unordered_map<std::string, std::vector<int>> _dict;
for (auto &it : _dict)
{
for (auto &i : it.second) // it.second is the vector
{
std::cout << i;
}
}
如果要打印向量中的特定项目,您需要访问要打印的项目的位置:
for (auto &it : _dict)
{
std::cout << it.second.at(0) << std::endl; //print the first element of the vector
}
C++17:基于范围的 for 循环中的结构化绑定声明
从 C++17 开始,您可以使用 structured binding declaration as the range declaration in a range-based for loop, along with std::copy
and std::ostream_iterator
将连续的 std::vector
元素写入 std::cout
:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <unordered_map>
#include <vector>
int main() {
const std::unordered_map<std::string, std::vector<int> > dict = {
{"foo", {1, 2, 3}},
{"bar", {1, 2, 3}}
};
for (const auto& [key, v] : dict) {
std::cout << key << ": ";
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
}
// bar: 1 2 3
// foo: 1 2 3
return 0;
}
我知道这是一些基本的东西,但我无法设法遍历 std::vectors
的 unordered_map
并打印每个向量的内容。我的 unordered_map
看起来像这样:
std::unordered_map<std::string, std::vector<int> > _dict;
现在我可以打印地图的 first
属性:
for (auto &it : _dict)
{
std::cout << it.first <<std::endl;
}
但是在尝试打印 second
属性时出现错误。有谁知道我怎么能做到这一点?谢谢!
您可以使用 range-for loop
打印 std::vector <int>
的内容:
for(auto it : _dict){
std::cout << it.first << ": ";
for(int item : it.second){
std::cout << item << " ";
}
std::cout << std::endl;
}
您必须为向量使用内部循环。
string只有一个元素,可以直接打印,vector是元素的集合,按理说需要循环打印其内容:
std::unordered_map<std::string, std::vector<int>> _dict;
for (auto &it : _dict)
{
for (auto &i : it.second) // it.second is the vector
{
std::cout << i;
}
}
如果要打印向量中的特定项目,您需要访问要打印的项目的位置:
for (auto &it : _dict)
{
std::cout << it.second.at(0) << std::endl; //print the first element of the vector
}
C++17:基于范围的 for 循环中的结构化绑定声明
从 C++17 开始,您可以使用 structured binding declaration as the range declaration in a range-based for loop, along with std::copy
and std::ostream_iterator
将连续的 std::vector
元素写入 std::cout
:
#include <algorithm>
#include <iostream>
#include <iterator>
#include <string>
#include <unordered_map>
#include <vector>
int main() {
const std::unordered_map<std::string, std::vector<int> > dict = {
{"foo", {1, 2, 3}},
{"bar", {1, 2, 3}}
};
for (const auto& [key, v] : dict) {
std::cout << key << ": ";
std::copy(v.begin(), v.end(), std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
}
// bar: 1 2 3
// foo: 1 2 3
return 0;
}