【发布时间】:2014-04-13 15:47:51
【问题描述】:
我刚刚遇到了一个小问题,想知道众多解决方案中哪一个是最好/合适的。
我有一个 std::map,它有一个自定义类的键和值(因此交换它们不会解决任何问题)。
struct FooStruct
{
bool testOne;
bool testTwo;
};
struct BarStruct
{
// some data
};
const std::map<FooStruct, BarStruct>
{
{ { true, false }, BarStruct(someValues) },
{ { false, true }, BarStruct(someOtherValues) }
};
所以现在,FooStruct 不能以任何合理的方式“比较”,BarStruct 也不能。使用unordered_map 也无济于事,因为这需要一个散列函数,我当然实现了很多方法,但我怀疑这是获得真正未排序的地图的最简单方法。
我也不关心性能,因为地图中只有 4 个元素。不过可能还有几千次。
解决 cmets:这是一个抽象的例子。问题是,如果有几个测试,可以很容易地比较结构中的布尔测试结果集合,但是随着排列的数量随着 n 快速增长,我正在寻找一个可扩展的解决方案。
也许总体上可以替代std::map 类型,例如std::vector 的 std::pair 但这也有其他缺点。
【问题讨论】:
-
八个元素?最好使用 array 或硬编码。请记住,O(log N) 的东西适用于 N 的 large 值;对于非常小的值,许多优化结构(如红黑树)不如更简单的解决方案。
-
八个元素?似乎只有 4 个关键值。你从哪里得到其他 4 个?
-
我喜欢那些 cmets 和随机的否决票......正如我已经说过的 - 是的 - 有很多方法可以避免这个问题,但我很好奇并想学习......我或某人else 现在或将来可能会遇到 1000 个元素的问题,所以问有什么问题?
-
@Deduplicator 对不起我的错误,我简化了这个问题的例子。
-
真的不清楚“问题”是什么。如果你想要
std::map,实现严格的弱排序比较。如果你想要unordered_map,实现哈希和相等比较。
标签: c++ c++11 stl containers stdmap