2013-04-17 59 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

Angew,你太棒了。謝謝 – user373215