pop_back来自向量的元素

Pop_back an element from a vector

本文关键字:向量 元素 back pop      更新时间:2023-10-16

我想输入一个字符串,然后将整数输入两个单独的向量,一个用于字符串,一个用于整数。

如果输入的字符串已经存在于字符串中的向量中,我想删除最后一个字符串输入的字符串。

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

使用地图将更有效地解决您的问题对数时间复杂性。它也将是简洁而直观的。

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建议,使用地图,以便您可以更有效地查找并在一个呼叫中删除字符串和整数条目。