0

文字列のリストがあります。次のように、std::list で重複する値を削除するにはどうすればよいですか

std::list<std::string> listName;

listName.push_back("Foo");
listName.push_back("Bar");
listName.push_back("Foo");

次に、「Foo」という重複した名前を削除したいと思います。そして残るは「バー」の名前だけ。

ありがとう!

4

3 に答える 3

2

一意の要素のみが必要な場合は、次の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

于 2013-10-08T00:28:27.303 に答える