如何访问 vector<map<first, pair<K,V>>> 中的元素

How to access element in vector<map<first, pair<K,V>>>

我在访问向量容器中的映射和对成员时遇到问题。我尝试使用 for 循环和向量迭代器来尝试访问向量中的元素,但没有成功。这是我的代码:

typedef int lep_index;
typedef double gold;
typedef double pos;
map<lep_index, pair<gold, pos>> lep;
vector <map<lep_index, pair<gold, pos>>>  leps;

//initialize lep and leps
for (int i = 1; i <= 10; i++) {
    lep[i - 1] = pair<gold, pos>(MILLION, i * MILLION);
    leps.push_back(lep);
}

//I can access lep's elements by doing this
for (auto &i : lep) {
            cout << i.first << ": " << i.second.first << ", " << i.second.second << endl;
        }

//but when i try with vector...
for (vector <map<lep_index, pair<gold, pos>>>::iterator it = leps.begin(); it != leps.end; it++) {
            cout << it->
        }
//I cannot use it pointer to access anything

我不知道我在这里做错了什么或正确的方法所以希望我能得到一些帮助。

要访问 leps 的内容,您将需要另一个 for 循环。

for (vector <map<lep_index, pair<gold, pos>>>::iterator it = leps.begin(); it != leps.end; it++)
{
   auto& lep = *it;         // lep is a map.
   for ( auto& item : lep ) // For each item in the map.
   {
      cout << item.first << ": " << item.second.first << ", " << item.second.second << endl;
   }
}

尝试:

for (auto& map : leps) {
    for (auto& i : map) {
            cout << i.first << ": " << i.second.first
                 << ", " << i.second.second << endl;
    }
}

您可以这样访问:

std::cout << vec[0][100].first << " " << vec[0][100].second << '\n';

其中 0 是向量中的第一个元素,100 是键。

如果你想访问每个元素,range-based for loop很方便:

for (const auto& i : vec)
    for (const auto& j : i) {
        std::cout << "Key: " << j.first << '\n';
        std::cout << "pair: " << j.second.first << " " << j.second.second << '\n';
    }