2013-04-17 2 views
3

У меня есть карта, в которой хранятся строки, а также набор двойников следующим образом.std :: установка карты без создания временного значения

typedef std::map<std::string, std::set<double> > exprType; 
typedef std::map<std::string, std::set<double> >::iterator exprIter; 

exprType exPricesData; 

std::vector<double> lastprice; 
std::string exchange; 

Мне нужен способ вставить цены для данного ключа и написал следующий фрагмент кода.

std::set<double> prices; 
    double temp = lastprice[0]; // An array of values comes as a parameter 
    prices.insert(temp); // Creating a temp. set 

    std::pair<exprIter,bool> locIter = exPricesData.insert(
      std::pair<std::string, std::set<double> >(exchange, prices)); 

    for (int i = 1; i < lastprice.size() ; ++i) 
    { 
     locIter.first->second.insert(lastprice[i]); 
    } 

Мне интересно, есть ли способ улучшить особенно первую часть, которая создает набор темпов.

+1

Вы используете C++ 11? –

+1

Я удалил свой ответ, потому что неправильно понял ваш код. Вы можете вставить пустой набор 'std :: pair locIter = exPricesData.insert (std :: pair > (exchange, std :: set ())) ; ' – stefaanv

ответ

4

Вы имеете в виду что-то вроде этого?

std::set<double> &prices = exPricesData[exchange]; //returns existing value, or inserts a new one if key is not yet in map 

prices.insert(lastprice.begin(), lastprice.end()); 

О, и будьте осторожны при использовании std::set<double>. Если числа являются результатом вычисления, числовые погрешности могут привести к тому, что отдельные элементы набора будут не такими, где вы их не ожидаете.

+0

По-видимому, вопрос не освежился, чтобы сказать, что этот ответ был там, когда я добавлял свою. Удалит мой и +1 вам хороший сэр. – pstrjds

+0

@pstrjds Спасибо. Иногда всплывающие всплывающие подсказки «новые ответы» действительно опоздают. – Angew

+0

Ангел, ты слишком хорош. благодаря – user373215

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