2

我正在关注http://www.cplusplus.com/reference/map/map/map/

我正在尝试构建一个反转索引结构,它是一个以 64 位整数作为键的映射,每个键将包含一个指向 sub-map 的指针。子映射将包含 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;

但是,如果我们有一个 map 的指针类型,我们该怎么做呢?我上面的代码会产生一个错误抱怨

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

Map 是一棵红黑树,用于操作,因此您可以使用它来获得搜索和插入等的最佳性能。您在 invertID 中使用的是地图而不是多地图。因此,在大多数情况下,当您获取某些密钥时,我会假设您正在寻找一对元素。除非您出于我现在没有想到的任何原因需要第二张地图,否则我会这样做:

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 回答