如何插入到map<double, multimap<int, Object*> >
?我試過mymap.insert(make_pair(double, make_pair(int, Object*)));
。此外,如何在迭代時訪問Object*
?我試過C++插入地圖<double,multimap <int,Object * >>
0
A
回答
2
你似乎在想:
using MyMap = std::map<double, std::multimap<int, Object*> >;
MyMap mymap;
mymap.insert(std::make_pair(dbl, std::multimap<int, Object*>());
要列舉:
#include <iostream>
#include <map>
struct Object {};
int main()
{
using MyMap = std::map<double, std::multimap<int, Object*> >;
MyMap mymap;
auto ins = mymap.insert(std::make_pair(42.0, std::multimap<int, Object*>()));
Object obj1, obj2;
ins.first->second.insert(std::make_pair(7, &obj1));
ins.first->second.insert(std::make_pair(7, &obj2));
for (auto const& pr : mymap)
{
std::cout << "dblkey: " << pr.first << '\n';
for (auto const& pr2 : pr.second)
{
std::cout << "\tintkey: "<< pr2.first
<< ", value: " << static_cast<const void*>(pr2.second) << '\n';
}
}
}
輸出(指針值會發生變化,很明顯)
dblkey: 42
intkey: 7, value: 0x7fff5fbff160
intkey: 7, value: 0x7fff5fbff158
最後,你的問題是一個比其他任何問題更重要的問題。您試圖插入一個std::pair<int, Object*>
,其中一個std::multimap<int, Object*>
實例屬於該實例。
2
在std::map<double, std::multimap<int, Object*> >
中,第二個值是單個std::multimap
對象,但您試圖將其設置爲std::pair
對象。 std::multimap
沒有接受std::pair
作爲輸入的構造函數,這就是代碼失敗的原因。
您需要構造一個std::multimap
對象插入到std::map
,如:
double d = ...;
int i = ...;
Object *obj = ...;
std::multimap mm;
mm.insert(std::make_pair(i, obj));
mymap.insert(std::make_pair(d, mm));
或者:
mymap[d].insert(std::make_pair(i, obj));
當迭代std::map
,它會返回一個迭代到std::pair
其中->first
是double
和->second
是std::multimap<int, Object*>
。
當迭代std::multimap
,它會返回一個迭代到std::pair
其中->first
是int
和->second
是Object*
。
auto iter1 = mymap.begin;
while (iter1 != mymap.end())
{
auto &mm = iter1->second; // mm = std::multimap<int, Object*>
auto iter2 = mm.begin();
while (iter2 != mm.end())
{
auto obj = iter2->second; // obj = Object*
// use obj as needed...
++iter2;
}
++iter1;
}
,如果你使用的ranged-based for
loop代替這將是簡單的:
for (auto &v1: mymap) // v1 = std::pair<double, std::multimap<int, Object*> >
{
auto &mm = v1.second; // mm = std::multimap<int, Object*>
for (auto &v2: mm) // v2 = std::pair<int, Object*>
{
auto obj = v2.second; // obj = Object*
// use obj as needed...
}
}
相關問題
- 1. if(<object> == <int>)
- 2. 插入到地圖類型<INT,矢量<int>>
- 3. C++ multimap <int,vector <string>>內存分配問題
- 4. ArrayList <Object <ArrayList <Object> >>
- 5. ArrayList <Double>插入(java)
- 6. 從vector <pair <double *,pair <double *,int * >>到數組的C++轉換
- 7. C++將vector <pair <double,double >>轉換爲double *,double *?
- 8. <Object>在地圖上<Object>是什麼意思?
- 9. C++ vector <vector <double>>加倍**
- 10. 爲地圖創建比較器<int,對<int, int>>
- 11. convert <vector><string> TO <vector><int> C++,Win32
- 12. 如何插入載體vpii <矢量<對<int,int>>>
- 13. C - 如何閱讀sscanf <int><string><int>?
- 14. C++:矢量<對<vector<int>,INT>>
- 15. 列表<double[][]>列出<double[]>
- 16. 將映射<double,tuple <double,double >>映射爲<double,double> without loop?
- 17. int [] [] convert --to - > Vector <Vector <Double>>
- 18. 從字典<int,List <Tuple <string,object >>>到Dictionary <int,List <Tuple <string,object,AnEnum >>> with LINQ
- 19. 地圖<char*, int>
- 20. stxxl地圖<int, string>
- 21. 減地圖<'a, int>
- 22. 地圖<int, string>
- 23. Mock.Of <Object> VS模擬<Object>()
- 24. List <Object> listObject = new ArrayList <Object>()?
- 25. 推矢量<double>到矢量<矢量<double>>
- 26. 從Expression <Func <IMyclass,int >>創建setter表達式<Action <object,object >>
- 27. C++如何打印這個地圖的std ::地圖<INT,對<矢量<對<int, int>>,INT >>
- 28. 在C++中,你如何我有<code>std::vector<std::pair<int,double>></code>對
- 29. 插入列表<string>和列表<Object>到字典
- 30. 演員表<Object> to List <Map <String,Object >>
如該插入對第二個是*不*一個'multi_map'實例(這是一個簡單的對'int'的和'Object *'),它的失敗並不奇怪。而且因爲'it-> second-> second'對任何*鍵映射範例都沒有意義。 –
WhozCraig