c++ - 迭代 vector 以更新 word_counter

标签 c++ vector iterator boost-multi-index

我有一个 Result 结构的 vector ,每个结构都包含一个契约(Contract)字符串,它是一个“单词”

struct Result
    {
        string contract;
        int score;
    };

我想找出 vector 中不同单词的出现频率。

我可以使用分隔符将它们全部连接成一段文本并从中提取频率

text_tokenizer tok(text, separator);

for (text_tokenizer::iterator it = tok.begin(), it_end = tok.end();
    it != it_end; ++it)
{
    ++total_occurrences;
    word_counter::iterator wit = wc.insert(*it).first;
    wc.modify_key(wit, ++bl::_1);
}

使用多索引容器

typedef multi_index_container
<
    word_counter_entry,
    indexed_by
    <
    ordered_non_unique
    <
    BOOST_MULTI_INDEX_MEMBER(
        word_counter_entry, unsigned int, occurrences),
    std::greater<unsigned int>
    >,
    hashed_unique
    <
    BOOST_MULTI_INDEX_MEMBER(word_counter_entry, std::string, word)
    >
    >

> word_counter;

但是迭代原始 vector 似乎更干净

for (std::vector<Result>::iterator it = begin(v); it != end(v); ++it)
    {
        //Magically update word counter 
    }

非常感谢任何合适的魔法。

最佳答案

您可以只创建一个以单词为键、频率(计数)为值的映射。

std::map<std::string, int> frequency;
for (auto& result : v) {
    frequency[result.contract]++;
}

关于c++ - 迭代 vector 以更新 word_counter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47154484/

相关文章:

c++ - 重建后 Win32 Paint Text 仍然存在

c++ - 从配置源加载和存储加密 key

c++ - C++中构造函数的奇怪使用

C++ Evil Hangman 实现问题

安卓XML|了解 pathData 语法

C++ 迭代器异常安全

c++ - 遍历多个 vector ,在n个元素后执行操作

c++ - Windows 上的 Google 测试框架检查您是否以交互方式运行

c++ - vector<bool> 迭代器有任何保证吗?

c++ - 调用模板函数问题 "No matching function for call"arguments : iterators, object function