📜  在std :: vector中查找并打印重复的单词<string>使用STL函数(1)

📅  最后修改于: 2023-12-03 14:51:22.282000             🧑  作者: Mango

在std :: vector中查找并打印重复的单词使用STL函数

您好,本文将为您介绍如何使用STL函数在std::vector中查找并打印重复的单词。以下是具体实现的代码片段:

实现代码
#include <iostream>
#include <vector>
#include <set>
#include <algorithm>

int main()
{
    std::vector<std::string> words = {"hello", "world", "hello", "how", "are", "you", "are"};
    
    // 使用set去重
    std::set<std::string> wordSet(words.begin(), words.end());
    
    // 如果去重后的set大小和原本的vector大小不一致,则说明存在重复单词
    if (wordSet.size() != words.size())
    {
        // 找到重复单词并输出
        std::vector<std::string> duplicateWords;
        std::set<std::string> wordSet2;
        for (auto& word : words)
        {
            // set.insert()返回值为pair<iterator, bool>
            // 如果插入的元素已存在,则返回的bool为false,此时将其加入重复单词的vector中
            if (!wordSet2.insert(word).second)
            {
                duplicateWords.push_back(word);
            }
        }
        
        // 输出重复单词
        std::cout << "Duplicate words: ";
        for (auto& word : duplicateWords)
        {
            std::cout << word << " ";
        }
        std::cout << std::endl;
    }
    else
    {
        std::cout << "No duplicate words found." << std::endl;
    }
    
    return 0;
}
代码说明

实现的思路是先使用std::set将vector中的单词去重,然后比较去重后的set大小和原本的vector大小是否一致,如果不一致,则说明存在重复单词。接下来就是找到重复单词并输出了。

使用STL函数std::set能够很方便地去重,std::vector的成员函数find()也可以找到某个元素的位置,但是找到所有重复元素并不是很方便,因此本文选择使用std::set来去重。

最终输出的结果是重复单词的vector,可以根据实际情况调整输出方式。