[ 前言:关联的C++容器std::map
有点像只有一个关键列的微数据库.Boost bimap
将它提升为一个两列的表,在两列中都有查找,但这就像这个类比一样 - 没有"polymap"概括了这个想法.
无论如何,我想继续将地图视为数据库,现在我想知道是否有一个迭代器(或其他解决方案)允许我做几个组成映射的UNION.也就是说,所有的地图都有相同的类型(或者至少是值类型和比较器),我想要一个迭代器将整个集合视为一个大的多重映射(重复的键都可以),让我在正确的联合中遍历它订购.
这样的事情是否存在,也许在Boost中?或者是否容易装备?在伪代码中:
std::map<K, M> m1, m2;
union_iterator<K, M> u(m1, m2)
for(auto it = u.begin(); it != u.end(); ++it) { /* ... */ }
Run Code Online (Sandbox Code Playgroud)
例如,如果我们有:
m1 = { { 9:00, "Check in"}, { 12:00, "Break" }, { 16:00, "Check out"} };
m2 = { { 10:30, "coffee" }, { 12:15, "baked beans" }, { 15:00, "lies" } };
Run Code Online (Sandbox Code Playgroud)
然后我想要迭代器生成:
9:00, "Check in"; 10:30, "coffee"; 12:00, "Break"; 12:15, "baked beans"; ...
Run Code Online (Sandbox Code Playgroud)
正如我所宣布的,我得到了一些很酷的东西。
\n\n我现在发布它,因为我不确定今晚是否能及时回来发布它。我将花几句话进行解释。(在这篇文章中)
\n\n\n\n\n附言。包含内容将被削减(至约 20%);我可能也会对代码做一些更一般的工作。
\n
关于这段代码可以说很多:它不是很高效,而且还不是很干净。然而,它几乎是无限通用的,并且应该像其他任何东西一样扩展。所有代码都可以在 github gist 中找到:
\n\n您可以找到 test.cpp 的输出:
\n\n == input ========================================\n{ 2, aap } { 23, mies } { 100, noot } { 101, broer } \n{ b, 3.14 } \n == output =======================================\n 2: aap;\n 23: mies;\n 98: 3.14;\n 100: noot;\n 101: broer;\n\n == input ========================================\n{ b, 3.14 } \n{ 2, aap } { 23, mies } { 100, noot } { 101, broer } \n == output =======================================\n 2: aap;\n 23: mies;\n 98: 3.14;\n 100: noot;\n 101: broer;\n\n == input ========================================\n{ 2, aap } { 23, mies } { 100, noot } { 101, broer } \n{ 2, aap } { 23, mies } { 100, noot } { 101, broer } \n == output =======================================\n 2: aap;aap;\n 23: mies;mies;\n 100: noot;noot;\n 101: broer;broer;\n\n == input ========================================\n{ b, 3.14 } \n{ b, 3.14 } \n == output =======================================\n b: 3.14;3.14;\n\n == input ========================================\n{ 1.0, dag } { 22.0, bye } { 24.0, Tsch\xc3\xbc\xc3\x9f }\n{ 1, true } { 22, false } { 24, true } \n{ b, 3.14 } \n{ 2, aap } { 23, mies } { 100, noot } { 101, broer } \n == output =======================================\n 1.0: dag;true;\n 2.0: aap;\n 22.0: bye;false;\n 23.0: mies;\n 24.0: Tsch\xc3\xbc\xc3\x9f;true;\n 98.0: 3.14;\n 100.0: noot;\n 101.0: broer;\n\n == input ========================================\n{ 1.0, dag } { 2.0, EXTRA } { 22.0, bye } { 24.0, Tsch\xc3\xbc\xc3\x9f }\n{ 1, true } { 22, false } { 24, true } \n{ b, 3.14 } \n{ 2, aap } { 23, mies } { 100, noot } { 101, broer } \n == output =======================================\n 1.0: dag;true;\n 2.0: EXTRA;aap;\n 22.0: bye;false;\n 23.0: mies;\n 24.0: Tsch\xc3\xbc\xc3\x9f;true;\n 98.0: 3.14;\n 100.0: noot;\n 101.0: broer;\n
Run Code Online (Sandbox Code Playgroud)\n
归档时间: |
|
查看次数: |
2202 次 |
最近记录: |