我想定义一下
Map<int, char[5] > myMap;
上面的声明被c++编译器接受并且没有抛出错误,但是当我这样做的时候
int main()
{
char arr[5] ="sdf";
map <int, char[5]> myMap;
myMap.insert(pair<int, char[5]>(0,arr));
return 0;
}
我收到错误消息:
In file included from /usr/include/c++/4.6/bits/stl_algobase.h:65:0,
from /usr/include/c++/4.6/bits/char_traits.h:41,
from /usr/include/c++/4.6/ios:41,
from /usr/include/c++/4.6/ostream:40,
from /usr/include/c++/4.6/iostream:40,
from charMap.cpp:1:
/usr/include/c++/4.6/bits/stl_pair.h: In constructor ‘std::pair<_T1, _T2>::pair(const _T1&, const _T2&) [with _T1 = int, _T2 = char [5]]’:
charMap.cpp:9:42: instantiated from here
/usr/include/c++/4.6/bits/stl_pair.h:104:31: error: array used as initializer
/usr/include/c++/4.6/bits/stl_pair.h: In constructor ‘std::pair<_T1, _T2>::pair(const std::pair<_U1, _U2>&) [with _U1 = int, _U2 = char [5], _T1 = const int, _T2 = char [5]]’:
charMap.cpp:9:43: instantiated from here
/usr/include/c++/4.6/bits/stl_pair.h:109:39: error: array used as initializer
定义一个固定大小的字符数组对我来说很重要,因为它可以优化我的网络流操作,有什么方法可以实现吗?我不想使用char *
或std::string
。
6条答案
按热度按时间jm2pwxwz1#
我理解您的性能需求(因为我也做类似的事情),但是以这种方式使用字符数组是相当不安全的。
如果你有C++11的权限,你可以使用
std::array
,然后你可以定义你的map如下:如果你不能使用C++11,那么你可以使用
boost::array
。yjghlzjz2#
一种方法是将固定大小的字符数组 Package 为结构体。
ulmd4ohb3#
不能在标准容器中使用数组。
1.使用
std::vector
而不是数组1.使用指向5个元素的数组的指针Map。
1.使用boost tuples而不是5个元素的数组。
1.不使用数组,而是创建一个新的
struct
,它包含3个元素。创建map<int, newstructtype>
。或者将数组 Package 在struct
中,这样也可以工作。\
/
eufgjt7s4#
取代:
按如下方式填充位置:
628mspwn5#
假设目标是简化代码编写,那么使用一个编写技巧,让编译器将变量重新赋值给指针和整数:例如,对于变量wide和high(如TIFF文件中),请尝试
5ktev3wc6#
根据documentation,对可以包含不同的类(并为不同的类定义)。C数组不是类,而是构造。您必须使用重载的
operator[]()
定义自己的类。可能还需要比较运算符