迭代向量以更新word_counter

时间:2017-11-07 09:41:44

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

我有一个Result结构的向量,每个结构都包含一个“word”

的契约字符串
struct Result
    {
        string contract;
        int score;
    };

我想找到向量中不同单词出现的频率。

我可以使用分隔符将它们全部连接成一段文本,然后从

中提取频率
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);
}

使用multi_index_container

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;

但迭代原始载体似乎更清晰

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

任何适当的魔法都非常受欢迎。

1 个答案:

答案 0 :(得分:1)

您可以创建一个地图,其中单词为键,频率(计数)为值。

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