C++ 将对映射到结构
我写过一些代码,但遇到了一些问题,但我试图编写一个简化版本,以重现我遇到的错误:C++ 将对映射到结构,c++,stl,hashmap,C++,Stl,Hashmap,我写过一些代码,但遇到了一些问题,但我试图编写一个简化版本,以重现我遇到的错误: #include <iostream> #include<bits/stdc++.h> using namespace std; struct test{ float y; }; typedef pair<int, int> intpair; map<intpair, test> mp; void func(test &obj){ ob
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
struct test{
float y;
};
typedef pair<int, int> intpair;
map<intpair, test> mp;
void func(test &obj){
obj.y = 23.5;
}
int main () {
test* obj = new test;
auto key = make_pair(1,1);
mp.insert(key, obj);
func(*obj);
//cout << *(obj->y);
delete obj;
return 0;
}
此外,我确信我访问我的obj
成员y(cout语句被注释掉)的方式出错了;如何着手解决这些问题?没有需要密钥和值的重载
可以使用添加新元素:
mp[key] = *obj;
或者从C++17开始:
mp.insert_or_assign(key, *obj);
另一点是obj
的类型为test*
,而mapmp
的值类型为typetest
。指针应该被取消引用(就像我上面的例子一样),或者值的类型应该被更改为指针来执行此插入。没有接受键和值的重载
可以使用添加新元素:
mp[key] = *obj;
或者从C++17开始:
mp.insert_or_assign(key, *obj);
另一点是
obj
的类型为test*
,而mapmp
的值类型为typetest
。指针应该被取消引用(如我上面的例子),或者值的类型应该被更改为指针来进行插入。在map mp
中询问您自己,键值对的类型是什么。object
的类型是否与该类型匹配?intpair基本上是pair的别名,我正在将其映射到创建的结构的实例(应该是*obj)。我想我仍然缺少一些东西,你应该使用mp.insert(make_pair(key,*obj))
,因为insert需要一对intpair
和test
(不是你代码中的指针)。在映射mp
中,问问你自己,键值对的类型是什么。object
的类型是否与该类型匹配?intpair基本上是pair的别名,我正在将其映射到创建的结构的实例(应该是*obj)。我想我仍然缺少一些东西,你应该使用mp.insert(make_pair(key,*obj))
,因为insert需要一对intpair
和test
(不像你的代码那样是指针)。这很有效!不过,我还有几个后续问题:1)如何访问obj的成员?我试过cout y)
,但那会出错。2) 现在,我删除了obj
指针。从映射中删除条目是否也会从内存中删除obj
?(我相信不会,但我如何删除它?)。现在我尝试了类似于deletemp[key];mp.擦除(键)
1)cout y)
不起作用,因为obj->y
不是指针。它应该是cout y代码>或不正确。因此,我打算首先释放包含obj
的内存,然后从映射中删除条目,这样就不会出现内存泄漏。但假设我只能访问键
,我只打算使用mp[key]
来删除/擦除。我有点被卡住了,因为我想,deletemp[key]
只会在这里删除*obj
。如何执行此操作?delete mp[key]
无效,因为mp[key]
(test
)不是指针。不要在此处使用new
,因为我认为它不是必需的。静态分配test
的对象。std::map
和堆栈的信任释放系统。成功了!不过,我还有几个后续问题:1)如何访问obj的成员?我试过cout y)
,但那会出错。2) 现在,我删除了obj
指针。从映射中删除条目是否也会从内存中删除obj
?(我相信不会,但我如何删除它?)。现在我尝试了类似于deletemp[key];mp.擦除(键)
1)cout y)
不起作用,因为obj->y
不是指针。它应该是cout y代码>或不正确。因此,我打算首先释放包含obj
的内存,然后从映射中删除条目,这样就不会出现内存泄漏。但假设我只能访问键
,我只打算使用mp[key]
来删除/擦除。我有点被卡住了,因为我想,deletemp[key]
只会在这里删除*obj
。如何执行此操作?delete mp[key]
无效,因为mp[key]
(test
)不是指针。不要在此处使用new
,因为我认为它不是必需的。静态分配test
的对象。std::map
和堆栈的信任释放系统。