2015-04-14 4 views
-3

Я пытался отлаживать кодировку (C++/Quantlib), используя вектор карт. В основном я хотел бы найти элемент внутри карты, которая, в свою очередь, внутри вектора. Но поймал ошибку.Поиск элементов внутри вектора карты с заданным ключом (C++)

вход:

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

+0

Каков тип 'w_t_'? если это не итератор, который объясняет вашу ошибку, потому что это то, что возвращает 'find()'. – Borgleader

+0

Что вы хотите сделать, когда найдете его? – NathanOliver

+0

Код не имеет смысла. Почему вы выполняете цикл, если вы действуете только тогда, когда 'i == iTenor_'? Какой тип 'cds_maturities_'? –

ответ

0

Вы можете использовать простой цикл и использовать 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; 
} 
+0

Это будет делать много копий – zmb

+0

@zmb Теперь должно быть лучше. Я добавил универсальную ссылку на цикл и получаю переменные 'const &' – NathanOliver

Смежные вопросы