1

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

所以:

unordered_map["1"] = 6 导致 map["1"] 也为 6....

4

2 回答 2

4

没有理由不能使用指针。

例子:

#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
于 2013-10-03T22:54:03.583 回答
1

也许是这样的:

std::unordered_map<std::string, double> um;
std::unordered_map<std::string, double*> om;

om["1"] = &um["1"];

从现在开始,*om["1"]永远是 中对应元素的值um。只要确保你永远不会从无序地图中删除元素。

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

于 2013-10-03T22:52:03.640 回答