簡體   English   中英

無法使用C ++ STL映射獲得正確答案

[英]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

我不知道為什么這是錯的。

請注意地圖規范的“ 唯一鍵”部分。

唯一鍵
容器中沒有兩個元素可以具有等效鍵。

這意味着對於每個唯一鍵(在您的情況下為5.81),只能有一個值:最后一個值(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.

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