c++ - 二维 vector - 查找重复元素/获取索引位置并计算重复项

标签 c++ vector

我有一个包含文件中文本行的二维 vector ,如何获取重复行的索引并对它们进行计数。

for (unsigned int i = 0; i < myFileNames.size(); ++i)  
        {  
            infile.open("Whatever\\WhereEver\\" + myFileName[i]);  
        if (!infile.eof())  
        { 
            std::vector < std::vector< std::string>> lines;    
            while (getline(infile, line))  
            {  
                std::vector < std::string> tokens;  
                std::istringstream ls(line);  
                std::string token;

                while (ls >> token)  
                    tokens.push_back(token);  
                if (tokens.size())  
                    lines.emplace_back(std::move(tokens));  
            }  
            for (auto& line : lines)  
            {  
                for (auto& token : line)  
                    std::cout << token << ' ';  
                std::cout << '\n';  
            }       
        }  
        else
        {  
            cout << "Never opened the file line 106 .." << endl;  
        }  

最佳答案

您可以使用 std::map 将键作为线 vector ,将 int 作为值。当您通过主 vector 时,使用 operator[] 将线 vector 插入 map 并递增 int

std::vector < std::vector< std::string>> lines;
std::map<std::vector<std::string>, int> line_counter;

for (const auto & e : lines)
    line_counter[e]++;

这将为您计算每行的重复次数。

关于c++ - 二维 vector - 查找重复元素/获取索引位置并计算重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33400158/

相关文章:

c++ - 向 vector 添加可变大小元素列表的语法糖?

java - 变换+缩放一组点

c++ - boost::spirit::qi::phrase_parse 某处的未定义行为

c++ - 返回值时调用析构函数

c++ - 无法捕获模板特化方法抛出的异常

C++ Linux Sockets 在 char *msg 中添加变量

c++ - 如何应用样条基矩阵?

android - 我在哪里可以找到 Android 营销图片?一个空白的平板电脑图像,我可以将我正在运行的应用程序粘贴到其中作为宣传图片,这将是完美的

c++ - 使用可变参数模板的随机选择器函数——这可能吗?

c++ - std::vector 及其初始化指针一致性