C++でVC++7.0を使用してプログラミングを学んでます。
ひとつハマっているのですが…、
STLのlistを利用して、重複するデータのみを一つにしたlistにしたいです。
例えば
std::list<std::string>
[1] bbb
[2] aaa
[3] bbb
[4] ccc
[5] eee
[6] ddd
[7] bbb
[8] ccc
と格納されたlistがあった場合に、
[1] bbb
[2] ccc
と2つ以上あるデータを1つのみ格納するようにしたいです。
重複するデータを省く処理なら思いつくのですが…
(.sort()で重複するデータを並べ、.unique()で重複するデータを削除する)
上記のようなことは可能でしょうか?
何か有効な案がありましたら是非ご教授下さい!
No.1ベストアンサー
- 回答日時:
1. まず,sort() して
2. adjacent_find() の結果をすべて新しいリストにpush_back()して
3. 最後にunique()をする
というのが一番自然か.
あるいは
1. まず,sort)したあと
2. binary_predをnot_equal_to<T>にしてunique()して
3. pop_front() して,
4. 最後に,普通のunique()
でもいいような気もする.
No.4
- 回答日時:
#3の訂正をします。
#include <map>
std::map<std::string, int> list;
list["bbb"]++;
list["aaa"]++;
list["ccc"]++;
list["aaa"]++;
などとして、
map<std::string, int>::iterator p;
を経由して、
for(p = list.begin(); p != list.end(); p++)
{ p->first; // これで、index になっている方の、"aaa", "bbb", がソート済みで、しかも、重複なく、順次アクセスできます
しかも、たとえば、list["aaa"] とすれば、"aaa" の数が参照できます。
の間違いだと思います。
あと、日本語等のマルチバイト文字列が入っている場合には意図した順番にソートされていない可能性があります。
No.3
- 回答日時:
正しい使い方ではないと思いますが…… vector ではなくて、map を使うというのは?
#include <map>
std::map<int, std::string> list;
list["bbb"]++;
list["aaa"]++;
list["ccc"]++;
list["aaa"]++;
などとして、
map<std::string, std::string>::iterator *p;
を経由して、
for(p = list.begin(); p != list.end(); p++)
{ p->second; // これで、index になっている方の、"aaa", "bbb", がソート済みで、しかも、重複なく、順次アクセスできます
しかも、たとえば、list["aaa"] とすれば、"aaa" の数が参照できます。
回答ありがとうございます。
mapの特性を使うのも考えました。
しかし、listからmapに格納して
またlistに戻すのは冗長なのかな?と思って考えてました。
No.2
- 回答日時:
list<string>List1, List2;
list<string>::iterator Iter1;
//
// 要素を格納の省略
//
for( Iter1 = List1.begin(); Iter1 != List1.end(); ++Iter1 ) {
// カウントで要素数を調べる
if ( count(List1.begin(), List1.end(), *Iter1 ) > 1 ) {
if (List2.empty() ) {
List2.push_back( *Iter1 );
} else {
// 抽出先のリストに 検査項目があるかを調べ
// 無かった場合登録
if ( count(List2.begin(), List2.end(), *Iter1 ) == 0 ) {
List2.push_back( *Iter1 );
}
}
}
}
for( Iter1 = List2.begin(); Iter1 != List2.end(); ++Iter1 ) {
cout << *Iter1 << " ";
}
cout << endl;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) カラム上の重複を削除するクエリを教えてください 3 2022/04/12 14:11
- Excel(エクセル) ¥マークを含むパスの処理について(マクロ、または関数) 2 2022/12/25 02:11
- SQL Server ACCESSで3ファイルを結合して、表を作成するやり方を教えて下さい。 17 2022/08/15 20:34
- その他(Microsoft Office) パワークエリの複数ファイルのデータ統合について 3 2022/07/14 17:06
- SQL Server ACCESSで複数テーブルを結合して、リストを作る方法を教えてください。 2 2022/08/12 19:32
- SQL Server ACCESSで表が作りたく、そのためのSQL文や設定方法を教えてください。 1 2022/08/15 12:28
- その他(プログラミング・Web制作) python 3.10で 同じlistに同じ構文で同じデータ代入した結果が異なる現象発生 7 2022/06/18 11:08
- Perl perl このテキストファイルを簡単に配列に入れるには? 2 2022/04/27 20:24
- PHP 配列の値の更新方法について 1 2022/08/05 09:49
- Windows 10 バッチファイルの記述法とルールについてアドバイスをお願いいたします。 1 2022/04/13 10:50
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
どちのほうがすきですか?
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
日齢計算プログラム
-
メモリをアドレスを直接指定し...
-
文字の横にプルダウンを表示さ...
-
VBAでPDFのコピーとリネームを...
-
VBA他のブックから値のみ貼付す...
-
セレクトメニューで2つの項目...
-
実行時エラー 3020の対策
-
<SELECT>タグの折り返し
-
構造体の各データの表示につい...
-
プルダウンメニューで中央表示
-
複数列を持ったリストボックス...
-
selectタグ内の特定のoptionの...
-
VB6で、長い時間かかる処理...
-
pythonで演算子を変数に代入す...
-
Pythonを用いてCGIを作る勉強を...
-
html、youtube動画を埋め込みた...
-
【至急!!!】python言語で本を見...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
どちのほうがすきですか?
-
Python - Excel で Webからデー...
-
C# GetFilesで複数のファイルの...
-
STLのlistで重複するものだけを...
-
【python】辞書作成(ネスト)を...
-
PerlでXMLを解析して出力する。
-
Scheme 中置式から後置式へ
-
変数がの入れ方を教えてください。
-
可変引数をconstで参照渡し
-
C言語:単語カウント
-
Application.ScreenUpdating = ...
-
JSONで文字列が長い時
-
CLispのloop内の挙動について
-
formで特定のinputを送信しない...
-
16進の10進変換について
-
文字の横にプルダウンを表示さ...
-
実行時エラー 3020の対策
-
【メモリ不足で落ちる(python)】
-
パイソンのクラスのブログラム
-
パイソンのクラスについて
おすすめ情報