我可以构建一个std::map
,其中密钥类型是引用类型,例如Foo &
如果没有,为什么不呢?
答案 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_type
为Foo &
,那么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&