簡體   English   中英

如何在 C++ 中映射多個值?

[英]how to map multiple values in c++?

當前代碼

std::map<std::string,int> m;
...
m.insert(std::pair<std::string,int>(text,lineno));
...
std::cout<<"key: "<<iter->first<<"lineno: "<<iter->second<<std::endl;

如何在同一個鍵中保存多個值?

std::map<std::string,int> m;

通過聲明 this (the above),您已經實例化了 map,其中string類型的map (m) 的鍵和值的類型為int

C++你可以聲明一個帶有鍵和值對的map ,來自任何類型,你喜歡/需要什么,所以答案是, vector取決於你想從這個Data Structure實現什么。

這是帶有矢量的 ilustration:

std::map<std::string,std::vector<int>> my_map; 

這是帶有類型映射值的說明:

std::map<std::string, std::map<std::string, int>> my_map; 

筆記

如果您使用的是c++版本或低於c++11標准編譯器,則需要在相鄰的右尖括號之間添加空格,如下所示:

std::map<std::string, std::map<std::string, int> > my_map; 

總結其他人的評論,這里是一個答案。

假設您有某種類型T並且想要將std::string映射到該類型的多個值。 當您不知道需要映射到多少個多個值時,最簡單的方法是使用std::vector <T> 如果您確實知道要為每個鍵處理多少個多個值,則可以映射到std::array <T>

std::map <std::string, std::vector <int>> map;
map ["A"].push_back(10);
map ["B"].push_back(20);
map ["A"].push_back(42);

如果您正在處理我上面顯示的內容,您可以類似地使用std::multimap <std::string, int>

std::multimap <std::string, int> map;
map.insert({"A", 10});
map.insert({"B", 20});
map.insert({"A", 42});

如果您想將一個鍵映射到多個值以保存不同類型的信息,您可以使用std::map <std::string, std::vector <std::tuple <int, std::string, std::pair <int, int>>>> // ...etc. .

您也可以使用某種結構數據類型的向量來代替上述示例中的元組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM