вставка std :: map без создания временного значения

У меня есть карта, которая хранит строку и набор парных чисел следующим образом.

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]);
}

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

3

Решение

Вы имеете в виду что-то подобное?

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>, Если числа являются результатом вычислений, числовые неточности могут привести к тому, что отдельные элементы набора будут там, где вы их не ожидаете.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]