地图和unordered_map包含指向双精度的指针

map and unordered_map containing pointers to double?

本文关键字:双精度 指针 包含指 map unordered 地图      更新时间:2023-10-16

如果我有一个 std::map 和 std::unordered_map 我如何在双精度上使用指针,以便当unordered_map更新特定键的双精度值时,这已经反映在同一个"键"的 std::map 中?

所以:

unordered_map["1"] = 6 导致地图 ["1"] 也是 6....

没有

理由不能使用指针。

例:

#include <iostream>
#include <map>
#include <unordered_map>
#include <memory>
int main()
{
    std::unordered_map<std::string, std::shared_ptr<double>> umap;
    std::map<std::string, std::shared_ptr<double>> omap;
    std::shared_ptr<double> value(new double(1234.5));
    umap.emplace("key", value);
    omap.emplace("key", value);
    std::cout << "umap " << *umap["key"] << "n";
    std::cout << "omap " << *omap["key"] << "n";
    *umap["key"] = 9999.1;
    std::cout << "omap " << *omap["key"] << "n";
}

输出:

umap 1234.5
omap 1234.5
omap 9999.1

也许是这样的:

std::unordered_map<std::string, double> um;
std::unordered_map<std::string, double*> om;
om["1"] = &um["1"];

从现在开始,*om["1"]始终是um中相应元素的值。只要确保从不从无序列图中删除元素即可。

(来源:迭代器和引用失效规则)