3

私はC ++が初めてで、次のような文字列の配列から重複した文字列を削除する方法を探しています: string exempleArray[]= {"string1", "string2", "string1"}; コードの後、次のようになります: "string1", "string2"、しかし順序はまったく問題ではありません。お時間をいただきありがとうございます。

4

2 に答える 2

4

順序が重要でない場合は、最初に で配列を並べ替えてからstd::sort、 を使用std::uniqueして重複を削除できます。

std::sort(std::begin(exampleArray), std::end(exampleArray));
auto it = std::unique(std::begin(exampleArray), std::end(exampleArray));

ここでit、新しい一意の範囲の終わりを 1 つ過ぎたところを指します。固定サイズの配列で開始したため、そのサイズを一意の要素の数まで減らすことはできないことに注意してください。実行時にサイズを決定できるコンテナに要素をコピーする必要があります。std::vector<std:string>は明らかな候補です。

std::vector<std::string> unique_strings(std::begin(exampleArray), it);

固定サイズの配列の代わりに を使用して開始した場合std::vector<std::string>、コピーを回避して元のベクターから要素を削除できることに注意してください。

std::vector<std::string> strings = {"string1" "string2" "string1"};
std::sort(strings);
auto it = std::unique(std::begin(strings), std::end(strings));
strings.erase(it, strings.end());
于 2013-08-10T13:35:51.597 に答える
3

これが必要な場合は、std::set代わりに a に保存することをお勧めします。ユニークなアイテムを自動的に保存します。

または、配列 (またはstd::vector) が既にありstd::set、何らかの理由で使用できない場合は、それを実現するために を使用std::sort std::uniqueます。

于 2013-08-10T13:36:10.213 に答える