>

벡터 컨테이너 내에서지도 및 쌍의 멤버에 액세스하는 데 문제가 있습니다. 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

여기서 내가 뭘 잘못했는지 또는 올바른 방법을 모르겠 기 때문에 이에 대한 도움을 얻을 수 있기를 바랍니다.

  • 답변 # 1

    시도 :

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

  • 답변 # 2

    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;
       }
    }
    
    

  • 답변 # 3

    다음과 같이 액세스 할 수 있습니다 :

    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';
        }
    
    

  • 이전 string - 파이썬을 사용하여 정수를 뒤집고 회문인지 확인하십시오
  • 다음 c# - EditorWindow 스크립트에서 EditorGUILayoutToggle을 어떻게 굵게 할 수 있습니까?