gpt4 book ai didi

c++ - 如何删除包含结构的 map 或包含结构的 map ?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:54:18 31 4
gpt4 key购买 nike

我有下面的代码来创建一个 map ,其中包含一个包含结构图的结构。我的问题是如何在不留下任何内存泄漏的情况下从 providerMap 中删除一个元素。我可以只做一个 providerMap[prov_id].erase() 还是我需要在第二个或更复杂的时候做一个删除?

struct uriPrivs {
std::string name;
uchar properties;
};
struct providerValues {
int KeepAlive;
std::map<std::string /*uri*/, uriPrivs> uris;
};
std::map<std::string /*prov_id*/, providerValues> providerMap;

RISStorageManager::risStorageResponse RISStorageManager::update_provider(const std::string &prov_id, int KeepAlive) {

if (providerMap.find(prov_id) == providerMap.end()) {
providerValues x;
x.KeepAlive = KeepAlive;
providerMap[prov_id] = x;
return risStorageCreated;
} else {
providerMap[prov_id].KeepAlive = KeepAlive;
return risStorageUpdated;
}
}
RISStorageManager::risStorageResponse RISStorageManager::update_uri(const std::string &prov_id, std::map<std::string, uriPrivs> &uris) {
providerMap[prov_id].uris = uris;
}

最佳答案

如前所述,您无需在此处显式释放任何内存。您自己并不是在“新建”任何东西。一切都将由 map 对象的析构函数处理。

您可以稍微压缩 update_provider 函数...

RISStorageManager::risStorageResponse update_provider(const std::string &prov_id, int KeepAlive)
{
RISStorageManager::risStorageResponse response = (providerMap.end() == providerMap.find(prov_id)) ?
risStorageCreated : risStorageUpdated;

providerMap[prov_id].KeepAlive = KeepAlive;

return response;
}

这里有一些测试代码来解释一些事情......

int main(int argc, char *argv [])
{
// Create new provider and print result...
std::cout << update_provider("test1", 1) << std::endl;

// Add a URI to the first provider for fun...
providerMap["test1"].uris["www.google.com"].name = "GOOGLE";
providerMap["test1"].uris["www.google.com"].properties = 0xFF;

// Create new provider and print result...
std::cout << update_provider("test2", 1) << std::endl;

// Create new provider and print result...
std::cout << update_provider("test3", 1) << std::endl;

// Update first provider and print result...
std::cout << update_provider("test1", 0) << std::endl;

// Explicitly remove first provider if you want...
providerMap.erase("test1");

//
// Now only 2 providers are in map (test2 and test3).
// The program will exit and the STL map destructors will take care of any
// memory deallocation that is needed to clean up the maps. You don't need
// to explicitly clean up anything unless you want to remove providers from
// your map explicitly.
//

return 0;
}

关于c++ - 如何删除包含结构的 map 或包含结构的 map ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19916565/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com