0

vector<int>サイズ3のキーをキーとして、文字列を値として取り込むマップがあります。このマップには、ファイルから解析される約2000のエントリが含まれています。ベクトル1の各要素がベクトル2に存在するかどうかを確認する必要があります。

int index;
map<vector<int>,string>::iterator i2;

for ( i2=my_map.begin() ; i2 != my_map.end(); i2++)
{
    int id_cnt = (*i2).first.at(0);
    int prev_cnt = (*i2).first.at(1);

    for (index=0; index < my_map.size(); index++)
    {
        if (prev_cnt==id_cnt[index])                     //error
        {
            //code to do something
        }
    }

    cout << "hi" <<endl;
    cout << (*i2).second << endl;
}

私が得るエラーは次のとおりです。

「サススクリプトされた値は、配列、ポインター、またはベクトルではありません。

私は1週間からC++に取り組んでいますが、何も理解していません。:(

編集:

私は4つの列を持っています:

4 6 65 gdsg
6 1 64 sggg
1 2 34 wetw
7 4 25 wtwt
8 5 25 heyq
5 7 23 fheh
2 5 12 fetd

1列目の各番号が2列目にあるかどうかを確認する必要があります。したがって、1列目の1番目の要素の場合、2列目に4があります。次に、対応する3列目の番号(25)を取得して配置します。 20番目の要素の下に26個のアルファベットのベクトルでそれを。対応する文字列(wtwt)の最後の文字を取得する必要があるため、20番目。Tは20番目の文字です。

列1の要素に対してこのプロセスを実行する必要があります。

4

2 に答える 2

1

編集内容に基づいて、データ構造を次のように変更することをお勧めします。

struct Entry {
  int next;
  int index;
  string text;
};

typedef map<int, Entry> MyMap;

for(MyMap::iterator i = my_map.begin(); i < my_map.end(); ++i) {
  MyMap::iterator next = my_map.find(i->second.next);
  if(next == my_map.end()) {
    // not found!
    break;
  }
}

最初の列が次に入り、3番目の列がインデックスになります。2番目の列はマップキーです。

于 2012-09-20T18:52:35.910 に答える
0

マップを定義するときに、比較関数も渡すことをお勧めします。

地図の定義をご覧ください

http://www.cplusplus.com/reference/stl/map/map/

于 2012-09-20T18:15:16.967 に答える