我已经编程 1 周了,我有一个
vector<tuple<string, string, int>> edgesVector
,其中包含两个字符串和一个 INT。如何删除向量中包含两个特定字符串的元组?
错误是(简单地说):
没有匹配的调用函数 矢量
::擦除(元组 )
remove_edge(const string& u, const string& v) {
for (int i = 0; i<edgesVector.size(); i++ ) {
if (get<0>(edgesVector[i]) == u && get<1>(edgesVector[i]) == v){
edgesVector.erase(i);//error
}
if (get<1>(edgesVector[i]) == u && get<0>(edgesVector[i])== v){
edgesVector.erase(i);//error
}
}
}
您使用
std::remove_if
,并将结果传递给 edgesVector.erase
。这称为“擦除删除惯用语”。
void remove_edge(const string& u, const string& v) {
auto it = std::remove_if(edgesVector.begin(), edgesVector.end(), [&](auto & tup){ return (get<0>(tup) == u) && (get<1>(tup) == v); }); // removes elements that match u, v
it = std::remove_if(edgesVector.begin(), it, [&](auto & tup){ return (get<0>(tup) == v) && (get<1>(tup) == u); }); // removes elements that match v, u
edgesVector.erase(it, edgesVector.end()); // resize the vector to only hold live elements
}