2

http://www.cplusplus.com/reference/map/map/map/に従っています。

私は逆インデックス構造を構築しようとしています。これは、キーとして 64 ビットの整数を持ち、各キーがサブマップへのポインターを保持するマップです。サブマップには int int ペアが含まれます。だから私はいくつかのサンプルを書くようになりました:

map<unsigned long long int, map<int, int>*> invertID;

int main(int argc, char *argv[]){

    map<int,int>* m = new map<int,int>();

    m[10] = 1;

    invertID[1] = m;

    return 0;

}

しかし、通常、次のような非ポインター型マップの場合の問題は次のとおりです。

std::map<char,int> first;

http://www.cplusplus.com/reference/map/map/map/で説明されているように、できることがわかりました

first['a']= 10;

しかし、マップにポインター型がある場合、どうすればそれができるのでしょうか? 上記の私のコードは、不平を言うエラーを生成します

error C2679: binary '=' : no operator found which takes a right-hand operand of type 'int' (or there is no acceptable conversion)
4

2 に答える 2

6

ポインターを参照解除できます。

 (*m)[10] = 1;

また

m->operator[](10) = 1;

一方で、これらすべての指針が本当に必要ですか? あなたのプログラムは、このフォームを使用することで大きな被害を受けますか?

map<unsigned long long int, map<int, int>> invertID;
int main()
{
    map<int,int> m;
    invertID[1][10] = 1;
}
于 2013-02-09T10:44:33.840 に答える
2

マップは赤黒の木であり、検索や挿入などで最高のパフォーマンスを得るためにそれを使用します。invertID でマルチマップではなくマップを使用しています。したがって、ほとんどの場合、特定のキーをフェッチするときは、要素のペアを探していると思います。私が今考えていない何らかの理由で2番目のマップが必要でない限り、私はこれに行きます:

std::map < unsigned long long int, std::pair < int , int >  > invertID;
int main(){
    std::pair<int,int>  m;
    m = std::make_pair(1,2);
    invertID[1] = m;
    return 0;
}

楽しむ。

于 2013-02-09T11:15:05.170 に答える