STL映射查找第一个不可重复的字符
STL map to find the first non repeatable character
我写了一个小的c++程序来记录字母表的数目。我使用stl映射相同的,
有趣的是,我没有得到列表,因为它出现在输入。例如,对于单词TESTER,我的程序应该给出
T 2
E 2
S 1
R 1
但这是给予,
E 2
R 1
S 1
T 2
改变字母的位置
我想要输入中出现的字母的0/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 != ' ' )
{
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;
}
这里展示了如何完成的方法
#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;
}
程序输出为
T 2
E 2
S 1
R 1
您忽略了std::map
有自己的内部排序,它完全独立于添加元素的顺序。从示例中可以看到,它是按字母顺序排列的。这是按char
键的值递增的顺序。
还要注意,您的映射操作过于复杂。你所需要做的就是
char *str = "TESTER";
map<char,int> checkmap;
while( *str != ' ' )
{
checkmap[*str]++;
++str;
}
如果你对这种事情感兴趣,while
可以进一步崩溃:
while( *str != ' ' ) checkmap[*str++]++;
关于在保持插入顺序的同时映射值的一般问题,请参见跟踪插入顺序的std::map ?
没有办法跟踪元素添加到映射中的顺序。要获得相同的顺序,建议使用std::vector<std::char, int>
,然后更新相同的。
相关文章:
- 碱基对映射 - 将 argv[i] 移动到整数或字符作为输入
- 在映射中使用无符号字符的矢量
- 将字符串字符映射到矢量
- 如何使用枚举将字符值映射到 int
- 仅在特定字符后使用键映射
- 如何将字符设置为函数?我对语法感到困惑...设置<char>max_freq(映射<字符,整数>频率)
- 如何访问 <int,字符串>映射中的特定字符?
- 以三个无符号字符为关键字的无序映射
- 将C++枚举映射为常量字符*
- 无符号字符数组作为映射中的键 (STL - C++)
- 字符数组作为C++映射中的值
- 如何创建以字符作为键值并将字符串数组作为映射值的映射 - 数组必须具有不同的长度
- C++:第一个非重复字符,使用哈希映射的 O(n) 时间
- 我可以将可搜索字符设备“/dev/mem_8”映射到内存并使用x86_64指令访问它吗?
- 在C++中使用<字符串,字符串>或<字符串,字符>映射而不是<字符,字符>
- 如何在C++中把结构映射到字符正确的方法
- 转储映射<字符串、字符串>到字符向量
- 如何将 2 个字符* 数组直接映射到 std::map<std::string,std::string>
- 如何访问矢量的元素,其中矢量与unordered_map中的字符'key'映射?
- 在编译时或运行时将常量字符 * 映射到鸭型 T