我想将一个字符串后跟一个整数输入两个单独的向量,一个用于字符串,一个用于整数。
如果输入的字符串已存在于字符串的向量中,我想删除最后输入的字符串。
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
。
答案 0 :(得分:0)
使用地图可以更有效地解决您的问题,即对数时间复杂度。它也将简洁直观。
std::map< string, int> mymap;
// your loop starts
mymap[tempName] = tempScore;
// loop ends
如果字符串已经存在,则set value语句将替换string的值。
答案 1 :(得分:0)
要从矢量中删除,请使用find
和erase
vector<string>::const_iterator citr = std::find(names.cbegin(), names.cend(), tempName);
if (citr != names.cend())
{
names.erase(citr);
}
为了让您的生活更轻松,例如@devsaw建议,请使用地图,以便您可以更有效地查找并在一次调用中删除字符串和整数条目。