지도의 키가 식별자이고 기호가 반환하는 벡터가 유형과 범위를 나타내는 문자열 쌍을 각각 포함하는 기호 테이블을 만들려고합니다. 문자열 키를 가진 맵을 얻으려면 작업 할 단일 문자열의 벡터를 반환 할 수 있지만 쌍을 시도 할 때 오류가 발생합니다.C++에서 <string, vector <pair :: <string, string >>> 맵에 삽입하려면 어떻게해야합니까?
#include <iostream>
#include <utility>
#include <vector>
#include <map>
#include <string>
using namespace std; //using std namespace for readibility for this question
int main() {
string key = "myKey";
string string1 = "string1";
string string2 = "string2";
pair <string, string> stringPair = make_pair (string1, string2);
map<string, vector<std::pair <string, string>>> myMap;
myMap.insert(make_pair (key, make_pair (string1, string2))); //insert key into map, create empty vector
//this is where I get th error
myMap[key].push_back(std::make_pair (string1, string2)); //use key, push strings into vector<string, string>
return 0;
}
error C2664: 'std::pair<_Ty1,_Ty2> std::_Tree<_Traits>::insert(std::pair<const _Kty,_Ty> &&)' : cannot convert parameter 1 from 'std::pair<_Ty1,_Ty2>' to 'std::pair<_Ty1,_Ty2> &&'
내가 작업 한 문자열의 벡터를 얻을 수 있지만,이 식별자의 각 인스턴스에 대해 진정한 쌍을 것보다 해결의 더처럼 보인다. 어떤 도움을 주셔서 감사합니다!
오, 내 오류가 지금 보입니다. 하지만지도에 키를 넣으려면 명시 적으로 삽입해야합니다. – Johnny
아니요,'map :: operator []'는 키가 이전에지도에 없으면 기본값을 만들고 삽입합니다. 'vector :: vector()'(기본 ctor)는 빈 벡터를 제공하므로 정확히 원하는 것입니다. –
그래, 그게 효과가있어. 마지막 질문에, 당신이 원한다면. 벡터 쌍의 멤버에 어떻게 액세스합니까? 'it-> first'는 키를 가리 킵니다. 그러나'it-> second.first'는 작동하지 않습니다. – Johnny