簡體   English   中英

Pop_back向量中的元素

[英]Pop_back an element from a vector

我想在兩個單獨的向量中輸入一個字符串,后跟一個整數,一個用於字符串,一個用於整數。

如果輸入的字符串已經存在於字符串向量中,那么我想刪除最后輸入的字符串。

while (std::cin >> tempName >> tempScore)
{
    if (tempName != "NoName" && tempScore != 0)
    {
        for (int i = 0; i < names.size(); i++)
        {
            if (tempName == names[i])
            {
                std::cout << "Error, duplicate name!" << std::endl;
                names.pop_back();
                scores.pop_back();
            }
        }
        names.push_back(tempName);
        scores.push_back(tempScore);
    }
    else
    {
        std::cout << "Wrong name and score!" << std::endl;
        break;
    }
}

這是使用上述代碼的示例輸出。

Enter a name followed by a score
foo 7
bar 9
foo 3
Error, duplicate name! 
^Z
foo 7
foo 3
Press any key to continue . . .

它將刪除我先前輸入的tempName並輸入最后輸入的名稱,該名稱是重復的名稱。 我嘗試使用vector.erase但這no instance of overloaded function給我no instance of overloaded function

使用地圖將更有效地解決您的問題, 對數時間復雜度。 它將也是簡潔和直觀的。

std::map< string, int> mymap;
// your loop starts
mymap[tempName] = tempScore;
// loop ends 

如果字符串已經存在,則設置值語句將替換字符串的值。

要從向量中擦除,請使用finderase

vector<string>::const_iterator citr = std::find(names.cbegin(), names.cend(), tempName);
if (citr != names.cend())
{
    names.erase(citr);
}

為了使您的生活更輕松(如@devsaw建議的那樣),請使用地圖,以便更高效地查找並在一次調用中刪除字符串和整數項。

暫無
暫無

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

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