在给定键的地图向量中查找项目(C++)

Posted

技术标签:

【中文标题】在给定键的地图向量中查找项目(C++)【英文标题】:Finding items inside a vector of map given a key (C++) 【发布时间】:2015-04-14 15:47:05 【问题描述】:

我试图使用地图向量调试编码(C++ / Quantlib)。基本上我想在地图内找到一个项目,该项目又在一个向量内。但发现错误。

输入:

vector<map <Date, Real> > simulatedPrices_;    // a vector containing 1000 maps
vector<Date> cds_maturities_;

私有变量:

map <Date, Real> pricePathJ;    // for reading each map in the vector
Real w_t_;    //

编码:

for (int j = 0; j < no_of_paths; j++) 
    pricePathJ = simulatedPrices_[j];
    for (int i = 0; i <= iTenor_; i++)     //iTenor is the number of element inside vector cds_maturities_
        startDate = ......;
        endDate = ......;
        w_t_ = pricePathJ.find(cds_maturities_[i]);    // error in pricePathJ saying there is no conversion function from iterator ... the pair<Date, Real> to Real. 
        ......

我是否犯了任何错误,或者在上面的编码中我是否忽略了任何指针类型?谢谢。

备注:变量类型Real类似于Double类型

【问题讨论】:

w_t_的类型是什么?如果它不是一个很好地解释您的错误的迭代器,因为那是 find() 返回的内容。 找到后想做什么? 代码没有意义。如果你只在i == iTenor_ 时采取行动,为什么还要循环? cds_maturities_是什么类型? 对不起,我错过了这个编码的细节。 w_t_ 实际上是“Real”类型(类似于“Double”类型)。我想找到键(日期)和地图返回我的项目(真实)(以便我可以使用该值进行其他计算)。所以我必须将 w_t_ 更改为类型 vector>::iterator?我不能直接读取值吗? 【参考方案1】:

您可以使用简单的 for 循环并使用 map 的 find() 函数来执行此操作。它将返回第一个匹配的Real

Real FindReal(const std::vector<std::map<Date, Real>> & data, const Date & findDate)

    for (auto&& e : data)
    
        auto it = e.find(findDate);
        if (it != e.end())
            return it->second;
    
    return some_value_if_not_found;

【讨论】:

这将进行大量复制 @zmb 现在应该好多了。我添加了对循环的通用引用,并通过const&amp; 获取变量

以上是关于在给定键的地图向量中查找项目(C++)的主要内容,如果未能解决你的问题,请参考以下文章

C++ 地图查找性能与 PHP 数组查找性能

在哈希表范围内查找键的最佳算法

Groovy - 如何在不更新地图的情况下使用默认值获取地图值

在地图列表中查找

在不知道确切行键的情况下在 Bigtable 中查找最新时间戳

C ++有效查找向量中第一个最近的匹配值?