从std :: map多个键中删除的最佳技巧

时间:2014-08-12 11:43:09

标签: c++ sqlite map std

需要从std::map<unsigned int, SomeNullPointer*>多个键中删除。

在此操作之前,我们会从sqlite数据库接收密钥,并将其存储在其他std::mapstd::list或任何其他std容器中。

我们不允许在从数据库接收后立即erase,因为执行SELECT时数据库有不必要的忙时间,并且第一个map的互斥锁有额外的锁定时间

因此,建议使用另一个map

map(或其他容器)中删除密钥的最佳方法

1 个答案:

答案 0 :(得分:1)

我想你可以在std::vector<unsigned int>中存储临时密钥,因为它们纯粹用作顺序数据。

从数据库接收所有密钥并将其存储在std::vector<unsigned int>后,对其进行迭代并从std::map<unsigned int, SomeNullPointer*>中删除。

像:

std::map<unsigned int, SomeNullPointer*> data;
// suppose you have many data
std::vector<unsigned int> tempKeys;
// receive keys from database...
// make sure you have received all the keys from database,
// maybe after some signal sent from database?

然后你做

for (auto key : tempKeys)
{
    data.erase(key);
}

或者你的指针可能需要删除:

for (auto key : tempKeys)
{
    auto it = data.find(key);
    delete (it->second);
    data.erase(it);
}