我能否构造一个键类型为引用类型,例如Foo &
的std::map
?如果不能,原因是什么?
我能否构造一个键类型为引用类型,例如Foo &
的std::map
?如果不能,原因是什么?
key_type
应该是可赋值的,但引用类型则不能。使用指针作为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&
'
operator[](const key_type & key)
。
如果key_type
是Foo &
,那么const key_type &
是什么?
问题在于它不起作用。您无法构造一个键类型为引用类型的std :: map。
boost::reference_wrapper<Foo>
应该可以工作。它具有隐式转换为Foo&
的功能。 - MSalters