我是C ++编程的新手,使用std :: map类时遇到了问题。
我想将int值映射到自定义类型。地图应该包含实际值而不是指向它的指针!
例:
我想这样做:datetime
而不是map<int,Type>
。
我尝试的是:
map<int,Type*>
错误消息是
错误:没有匹配函数调用'Type :: Type()'秒(std :: forward&lt; _Args2&gt;(std :: get&lt; _Indexes2&gt;(__ tuple2))...)
map<int,Type> myMap;
myMap.insert(make_pair(keyVal,Type(intVal,intVal,intVal))); //Type takes 3 int-values for construction.
myMap[intVal].useMemberFunction();
是我的用户定义类型。是否可以实例化这样的对象,或者我是否必须以某种方式使用Type
运算符?
我怎样才能做到这一点?
我在网上搜索它,但我找到的只是使用用户定义的类型作为键,这不是我想要做的。
答案 0 :(得分:2)
是否可以实例化像这样的对象
是的,是的。
还是我必须以某种方式使用new运算符?
不,你不是。
我怎样才能做到这一点?
这已经有效,假设您定义了示例中缺少的变量和类型:
#include <map>
#include <utility>
using std::map;
using std::make_pair;
struct Type {
Type(int,int,int){}
Type(){}
void useMemberFunction(){}
};
int main() {
int keyVal = 0, intVal = 0;
map<int,Type> myMap;
myMap.insert(make_pair(keyVal,Type(intVal,intVal,intVal))); //Type takes 3 int-values for construction.
myMap[intVal].useMemberFunction();
}
但需要注意的是:根据文档,std::map::operator[]
要求值类型是默认可构造的。如果类型不是默认可构造的,那么您不能使用下标运算符。您可以改为使用std::map::at
或std::map::find
。