C++ 计算排序文本文件C++;

C++ 计算排序文本文件C++;,c++,while-loop,binary-search-tree,ifstream,sstream,C++,While Loop,Binary Search Tree,Ifstream,Sstream,我有一个文件如下所示: myBST.insert("a", 4); myBST.insert("b", 2); myBST.insert("c", 1); myBST.insert("d", 3); aaaabbcddd 我使用fstream和sstream来读取它,我想要实现的是通过它读取单个元素的重复次数,这样我就可以向BST添加一个节点,并将重复次数作为其键 我希望能实现这样的目标: myBST.insert

我有一个文件如下所示:

myBST.insert("a", 4);
myBST.insert("b", 2);
myBST.insert("c", 1);
myBST.insert("d", 3);
a
a
a
a
b
b
c
d
d
d

我使用fstream和sstream来读取它,我想要实现的是通过它读取单个元素的重复次数,这样我就可以向BST添加一个节点,并将重复次数作为其键

我希望能实现这样的目标:

myBST.insert("a", 4);
myBST.insert("b", 2);
myBST.insert("c", 1);
myBST.insert("d", 3);
我尝试用一个新的sstream创建一个while循环,其中主循环找到一个元素,计算新sstream读取的值与原始sstream相同的次数,但它似乎不起作用:

    if (!datos.is_open())
    {
        cout << "failed to open";
    }

    string line;
    
    while (getline(datos, line))
    {
        stringstream ss(line);

        int count = 0;

        string line2 = line;
        stringstream ss2(line2);
        while (line2 == line)
        {
            stringstream ss2(line2);
            count++;
        }       
        
    }
    return 0;
如果(!datos.is_open())
{

你可以使用例如来跟踪“重复”吗?使用文件中的输入作为键,计数作为数据。然后你可以只做
map[line]++
。然后在地图上迭代,你就有了字符串和重复。它可以工作,但我还必须跟踪它何时停止重复。我还必须跟踪它何时停止重复,这正是
map[line]++
要实现的。每当出现不重复的
line
时,就会出现
map[行]
将插入一个新的
std::对(行,0);
然后第一次递增。请再次阅读其工作原理:返回对映射到等效于键的键的值的引用,如果该键不存在,则执行插入。我还必须跟踪它何时停止重复,或者在这种情况下是否意味着要执行某项操作(例如,存储或打印当前行号)?这也很简单:
如果(++map[line]==1){/*非重复行发生*/}
。如果您想保持排序顺序,我宁愿
std::map
而不是
std::unordered\u map