- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要对一个键的所有值执行一些代码,并且我需要对每个键重复该操作。我在寻找类似的东西:
for(auto key_iterator = hash_multimap.begin_keys();
key_iterator != hash_multimap.end_keys(); key_iterator++)
{
auto key = key_iterator->key;
// set up state
for(auto value_iterator = key_iterator->begin_values();
value_iterator != key_iterator->end_values(); value_iterator++)
{
// mutate state
}
// use state
// tear down state
}
这当然不行,但是有没有办法达到类似的效果呢?问题是我需要遍历每个键,然后对所有键使用共享状态。它的用途示例如下:
typedef std::hash_multimap<int> hash_t;
typedef hash_t::value_type hash_val;
hash_t hash;
hash.insert(hash_val(0, 1));
hash.insert(hash_val(1, 2));
hash.insert(hash_val(1, 3));
hash.insert(hash_val(2, 4));
hash.insert(hash_val(2, 5));
hash.insert(hash_val(2, 6));
hash.insert(hash_val(3, 7));
hash.insert(hash_val(3, 8));
hash.insert(hash_val(3, 9));
// print out the sum of values for each key here.
// expected output:
//
// 0: 1
// 1: 5
// 2: 15
// 3: 24
仅使用 hash_multimap.begin()
的问题是我无法确定它是否返回了该键的连续 block 中的每个键,即使它返回了,我也不知道这样的 block 在哪里开始和结束。
编辑:我也不能使用 hash_multimap.equal_range(key)
因为我不能遍历键。迭代包含每个键一次的键的方法也可以解决这个问题。
我该怎么做?
最佳答案
您可以使用下限和上限来实现此目的。例如尝试 -
auto value_iterator = hash->begin();
while( value_iterator != hash->end() ){
{
auto lIter = hash->lower_bound( value_iterator->first );
auto uIter = hash->upper_bound( value_iterator->first );
while( lIter != uIter ){
// sum the values associated with keys
// Increment lIter
}
value_iterator = uIter;
}
编辑:如果您使用的库没有 upper_bound、lower_bound 成员函数,您可以按照@Thanatos 的建议使用 equal_range
。 Microsoft实现确实有这些。逻辑相同,内部循环将是 -
pair<hash_multimap<int,int>::iterator,hash_multimap<int,int>::iterator> pairIter;
pairIter.equal_range(value_Iterator->first);
while( pairIter.first != pairIter.second ){
// sum the values associated with keys
// Increment pairIter->first
}
value_iterator = pairIter.second;
关于c++ - 先按键再按值遍历 `hash_multimap`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7369412/
我需要对一个键的所有值执行一些代码,并且我需要对每个键重复该操作。我在寻找类似的东西: for(auto key_iterator = hash_multimap.begin_keys();
这可能真的很简单,但我找不到一个简单的例子。我知道使用 hash_multimap 可以将多个值映射到一个键。但是我将如何访问这些值。我偶然发现的所有示例总是只访问映射到键的第一个值。这是我的意思的一
计算hash_multimap 中所有不同键的最有效方法是什么? 例如如果我有一个已经填充的 hash_multimap,(例如,一个容器,您可以在其中存储具有相同键的多个实体)我如何检索 key 集
我在定义我的类时做错了,这导致 Microsoft 的 hash_multimap 实现“未命中”。这是我的类(class): class TimeParameter { public: TimePa
我想序列化一个 hash_multimap,protocal buffers 支持吗?我试过 boost serializaitn,但它有关于 hash_multimap 的头文件混淆,所以我想尝试谷
我是一名优秀的程序员,十分优秀!