STL映射找到第一个不可重复的字符

Rnd*_*p13 2 c++ stl

我写了一个小的C++程序来保持字母表的数量.我正在使用stl地图,

有趣的是,我没有得到输入中出现的列表.例如对于TESTER这个词,我的程序应该给出

T  2
E  2
S  1
R  1
Run Code Online (Sandbox Code Playgroud)

但它的给予,

E       2
R       1
S       1
T       2
Run Code Online (Sandbox Code Playgroud)

改变字母的位置,

我想要输入中出现的字母的o/p.如果我遗漏了什么,请帮助我.这是我的代码

#include<iostream>
#include<map>

using namespace std;

int main()
{
    char *str = "TESTER";
    map<char,int> checkmap;
    map<char,int>::iterator p;
    int i;
    while( *str != '\0' )
    {
        p = checkmap.find(*str);
        i = p->second;
        if(p == checkmap.end())
        {
            checkmap.insert(std::make_pair(*str,++i));
        }
        else
        {
            p->second = ++(p->second);
        }
    str++;
    }
    for(p=checkmap.begin(); p!=checkmap.end(); p++)
    {
        /*if(p->second == 1)
        {
            cout<<(*p).first<<endl;
        }*/
        cout<<p->first<<"\t"<<p->second<<endl;
    }

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Vla*_*cow 5

这里展示了如何完成它的方法

#include <iostream>
#include <map>
#include <cstring>

int main() 
{
    const char *str = "TESTER";

    auto order = [&]( char c1, char c2 )
    {
        return ( std::strchr( str, c1 ) < std::strchr( str, c2 ) );
    };

    std::map<char, int, decltype( order )> m( order );

    for ( const char *p = str; *p; ++p ) ++m[*p];

    for ( const auto &p : m ) std::cout << p.first << ' ' << p.second << std::endl;
    std::cout << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

程序输出是

T 2
E 2
S 1
R 1
Run Code Online (Sandbox Code Playgroud)