gpt4 book ai didi

c++ - 如何使用键在 C++ 中聚合值?

转载 作者:搜寻专家 更新时间:2023-10-31 01:13:22 25 4
gpt4 key购买 nike

在 C++ 中,如何根据三个键聚合结构的值?

在 Perl 中,我会使用哈希的哈希来做到这一点(例如 $hash{$key1}{$key2}{$key3}{'call_duration'} += 25);

由于我是 C++ 的新手,您能推荐一种合适的方法吗?

我看过关于 SO 的主题,讨论了使用 std::map 在 C++ 中的嵌套哈希等价物,但是它指出这在性能方面很慢,并且因为我需要为电信运营商处理记录,所以性能至关重要.

我没有必要遵循使用模板库或任何在语法和思维方式上应该类似于 Perl 的方法,但是如果您不得不做类似的事情,您能否分享一种快速且合适的实现方法?

我主要局限于 C++ 98 标准(技术负责人允许使用更新的功能,前提是它们得到编译器的支持并且具有关键优势)。

如果描述困惑,我们深表歉意,在此先感谢您!

编辑:编译器版本是 GCC 4.1.2,导入 tr1/functional 作为一个库并不被它反对。

edit:非常感谢所有加入的人,特别是 Bartek 和 Rost 容忍了我的愚蠢问题。我决定选择 Rost 的答案,因为这是我真正能够开始工作的答案! :)

最佳答案

Common std::map 应该是合适的,它的性能在大多数情况下通常不是问题。 Hash 提供对元素的常量时间访问,基于树的 map 提供对数时间,但实际上常量时间可能大于对数 - 这取决于具体实现和特定数据。如果您一次填充容器然后只更新数据而不更改/插入/删除 key ,您可以使用排序的 std::vectorLoki::AssocVector

你应该首先尝试 std::map(或者 std::set 如果键实际上是数据的一部分)然后再决定它是否太慢了你与否。示例:

// Composite key definition
struct CompositeKey
{
int key1;
std::string key2;
AnotherType key3;

CompositeKey(int i_key1, const std::string& i_key2, AnotherType i_key3):
key1(i_key1), key2(i_key2), key3(i_key3)
{}

bool operator < (const CompositeKey& i_rhs) const
{
// You must define your own less operator for ordering keys
}
};

// Usage
std::map<CompositeKey, Data> aggrData;

aggrData[CompositeKey(0, "KeyString", AnotherType())] = Data();

if(aggrData.find(CompositeKey(0, "KeyString", AnotherType())) != aggrData.end())
{
// Process found data
}

对于进一步的性能研究,您可以尝试:

所有这些容器都有相似的接口(interface),因此封装起来并不困难,如果需要可以轻松切换实现。

关于c++ - 如何使用键在 C++ 中聚合值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12598252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com