std :: map插入而不创建临时值

时间:2013-04-17 17:19:46

标签: c++ stl stdmap stdset

我有一张地图,存储,字符串和一组双打如下。

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 个答案:

答案 0 :(得分: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>时要小心。如果数字是计算的结果,则数字不准确可能导致集合中不同的成员,而您不期望它们。