[英]Can't get the right answer with c++ STL map
我寫了一個小的地圖測試程序,如下所示:
void main()
{
vector<double> price;
vector<string> time;
price.push_back(5.70);
price.push_back(5.77);
price.push_back(5.81);
price.push_back(5.72);
price.push_back(5.81);
time.push_back("10:40");
time.push_back("10:43");
time.push_back("10:44");
time.push_back("10:46");
time.push_back("10:48");
map<double,string> myMap;
for (int i=0 ; i<price.size() ; i++)
{ myMap[price[i]] = time[i]; }
for (int i=0 ; i<price.size() ; i++)
{
if (price[i] == 5.81)
{ cout << myMap[price[i]] << endl; }
}
}
我的預期輸出應為:
10:44
10:48
但是我得到的輸出是:
10:48
10:48
我不知道為什么這是錯的。
myMap
每個鍵只能存儲一個值:鍵5.81被復制。
您隨后插入5.81->“ 10.48”時將覆蓋值“ 10:44”。
如果要為單個鍵重復值,請使用std::multimap
。
(此外,請注意將浮點類型用作鍵。浮點比較會遇到問題。)
在第一個周期的最后一次迭代中,您正在更新myMap [5.81],之前已在上面添加了2次迭代(不添加新元素)。 考慮使用std :: multimap
從文檔中
映射是關聯的容器,它按照特定順序存儲由鍵值和映射值的組合形成的元素。
在地圖中,鍵值通常用於對元素進行排序和唯一標識,而映射值存儲與該鍵關聯的內容。
因此每個鍵只能有一個值,這就是為什么它兩次打印相同值的原因。
另外,您可以替換代碼的以下部分:
for (int i=0 ; i<price.size() ; i++)
{
if (price[i] == 5.81)
{ cout << myMap[price[i]] << endl; }
}
// by
cout << myMap[5.81] << endl;
如果您不考慮double
問題,則大致相同。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.