どのように1はmap<double, multimap<int, Object*> >
に挿入するのでしょうか? 私はmymap.insert(make_pair(double, make_pair(int, Object*)));
を試してみました。さらに、それを反復するときに、Object*
にはどのようにアクセスしますか? 私はit->second->second
を試してみました。C++マップ<ダブル、マルチマップ<int型、オブジェクトに挿入* >>
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::multimap<int, Object*>
インスタンスが属しstd::pair<int, Object*>
を挿入しようとしていました。
2
std::map<double, std::multimap<int, Object*> >
の場合、2番目の値は単一のstd::multimap
オブジェクトですが、代わりにstd::pair
オブジェクトに設定しようとしています。 std::multimap
あなたのコードが失敗した理由ですstd::pair
入力として受け取るコンストラクタを持っていません。
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
を反復すると、それは->first
std::pair
にイテレータを返します。あなたがstd::map
に挿入するstd::multimap
オブジェクト、例えばを構築する必要がある
double
あると->second
はstd::multimap<int, Object*>
です。 std::multimap
を反復すると
することは、それが->first
がint
あると->second
がObject*
あるstd::pair
にイテレータを返します。
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. カスタムコンパレータ<int型、ペア<int, int>>
- 2. どのようにマップを整理<設定<マルチセット<int>>、int型> C++エラーC2338
- 3. メモリ効率の良いマップ<pair <int,int>、set <int>>代替
- 4. マップに値を挿入< K, V >
- 5. は私だけ前を使用した値の型</p> <pre><code>map<int id, struct_t*> table struct_t { int prev; int wt; string name; } </code></pre> <p>などの構造体とのマップを持って、マップC++
- 6. ラムダ型をint => IEnumerable <string>> int =>タスク<IEnumerable <string> >>に変換しますか?
- 7. C++:マップ<string, int>をイテレータを使用してベクトル<map <string, int>>にプッシュバックしますか?
- 8. ベクトル<int> v(istream_iterator <int>(cin)、istream_iterator <int>());
- 9. @RequestBodyマップの<string、オブジェクト>入力の取得int値
- 10. ハイブアレイ<Struct<>>挿入がヌル
- 11. <Int> == <String>
- 12. ベクトル<pair <int,int>>をマルチマップ<int,int>に効率よく変換する方法はありますか?
- 13. マルチセットでの下限の検索<pair <int,int>>(C++)
- 14. C#List <> - データベースに挿入
- 15. マップ<Shape、int []>をJava 8の<Shape、Set <Integer>>マップに変換するには?
- 16. MOQ - 辞書<文字列、ダブル>オブジェクト
- 17. 'Range <Int>'の型の値を 'Range <Index>'(別名Range <String.CharacterView.Index>)
- 18. データをリストに挿入<String[]>をリスト<String>にマップしてください。<ストライピング、ストライピング>
- 19. ベクトル<int> :: size_type in C++
- 20. Dictionary <int、List <Tuple <string、object >>>からDictionary <int、List <Tuple <文字列、オブジェクト、AnEnum >>> LINQを使用
- 21. C++ IEnumerable <int> = class-> method(); WinFormsで
- 22. ベクトル<pair <int、pair <int,int> >> Pythonのデータ構造
- 23. 私はこのコード</p> <pre><code>#define pii pair<int, int> #define pip pair<int, pii> ... vector<pip> graph; graph[i] = pip(c, pii(u,v)); </code></pre> <p>に遭遇しました
- 24. 定義、初期化、および使用方法 - ベクトル<ベクトル<ペア< int,int >、int>> v C++では?
- 25. intへのポインタとC++でのintへのポインタへのポインタの違いは何ですか?私は言語の問題を考えていないint型</p> <p>へのポインタにint型</p> <p>と</p> <p>ポインタへ</p> <p>ポインタ:
- 26. Map <String、int []>のマップ方法は?
- 27. ダガー2:マップ<Class <?を挿入する方法extends Foo>、Provider <? Foo >>
- 28. 抽出ベクトルのstd ::マップから<int型、のstd ::ベクトル>
- 29. リターンするC#Linqクエリ<int,int[]>
- 30. "int - >(int - > int)= <fun>"型の式を使用できますか?
その挿入されたペアの2番目は* 'multi_map'インスタンス*ではないので(それはint' 'のシンプルなペアですと 'Object *')、その失敗は驚くべきことではありません。そして、 'it-> second-> second'は、キーとマップのマップのどんな*パラダイムでも意味がありません。 –
WhozCraig