可以将引用类型用作STL映射中的键类型

时间:2009-11-25 10:33:16

标签: c++ stl types containers

我可以构建一个std::map,其中密钥类型是引用类型,例如Foo &如果没有,为什么不呢?

4 个答案:

答案 0 :(得分:14)

根据C ++标准23.1.2 / 7 key_type应该是可分配的。参考类型不是。

答案 1 :(得分:4)

不,因为std :: map中的许多函数都引用了keytype,并且引用的引用在C ++中是非法的。

/A.B。

答案 2 :(得分:1)

考虑operator[](const key_type & key)。 如果key_typeFoo &,那么const key_type &是什么? 问题是它不起作用。您不能构造一个std :: map,其中键类型是引用类型。

答案 3 :(得分:1)

指针作为std :: map的键类型是完全合法的

#include <iostream>
#include <cstdlib>
#include <map>

using namespace std;


int main()
{
int a = 2;
int b = 3;
int * c =  &a;
int * d =  &b;
map<int *, int> M;

M[c]=356;
M[d]=78;
return 0;
}

初始化引用不能是键:

#include <iostream>
#include <cstdlib>
#include <map>

using namespace std;


int main()
{
int a = 2;
int b = 3;
int & c =  a;
int & d =  b;
map<int &, int> M;

M[c]=356;
M[d]=78;
return 0;
}
In file included from /usr/include/c++/4.4/map:60,
                 from test.cpp:3:
/usr/include/c++/4.4/bits/stl_tree.h: In instantiation of 'std::_Rb_tree<int&, std::pair<int&, int>, std::_Select1st<std::pair<int&, int> >, std::less<int&>, std::allocator<std::pair<int&, int> > >':
/usr/include/c++/4.4/bits/stl_map.h:128:   instantiated from 'std::map<int&, int, std::less<int&>, std::allocator<std::pair<int&, int> > >'
test.cpp:14:   instantiated from here
/usr/include/c++/4.4/bits/stl_tree.h:1407: error: forming pointer to reference type 'int&