map和unordered_map包含指向double的指针?

时间:2013-10-03 22:47:15

标签: c++ pointers map reference unordered-map

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

所以:

unordered_map [“1”] = 6导致map [“1”]也是6 ....

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

也许是这样的:

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

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

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

(资料来源:iterator and reference invalidation rules