文字列のリストがあります。次のように、std::list で重複する値を削除するにはどうすればよいですか
std::list<std::string> listName;
listName.push_back("Foo");
listName.push_back("Bar");
listName.push_back("Foo");
次に、「Foo」という重複した名前を削除したいと思います。そして残るは「バー」の名前だけ。
ありがとう!
文字列のリストがあります。次のように、std::list で重複する値を削除するにはどうすればよいですか
std::list<std::string> listName;
listName.push_back("Foo");
listName.push_back("Bar");
listName.push_back("Foo");
次に、「Foo」という重複した名前を削除したいと思います。そして残るは「バー」の名前だけ。
ありがとう!
一意の要素のみが必要な場合は、次のlistName
ことができます。
listName.sort();
listName.unique();
listName はそのままにしておく必要があります:"Foo", "Bar"
重複しているすべての要素を取り除きたい場合は、 を使用std::list::sort
して要素を並べ替えてから、 を使用std::adjacent_find
して重複する要素を見つけることができます。
listName.sort();
std::list<std::string>::iterator ab = std::adjacent_find(listName.begin(), listName.end());
if (ab != listName.end()) // if duplicate elements are found
{
std::list<std::string>::iterator ae = std::upper_bound(listName.begin(), listName.end(), *ab); // try to locate last occurrence
if (std::distance(ab, ae) > 1)
{
listName.erase(ab, ae); // remove all dup elements
}
}
listName のまま:"Bar"
詳細については、こちらを参照してくださいstd::list