如何使用矢量或地图存储不同角色的位置
How to store different character's positon using vector or map
我有一个像" aabcdba"之类的字符串,现在我想存储不同角色位置的位置。我正在尝试使用vector
和unordered_map
存储。存储不同字符的位置有什么好方法吗?
void topKFrequent(string s) {
vector<vector<int> >v(123);
//unordered_map<char, vector<int>>m;
for(int i=0;i<s.size();i++) {
v[s[i]].push_back(i);
// m[s[i]].push_back(i);
}
for(int i=0;i<123;i++) {
for(int j=0;j<v[i].size();j++) {
char ch=i;
cout<<ch<<"->"<<v[i][j]<<endl;
}
}
}
如果字符串=" aabcdba",我想要以下结果:
a->0,1,6;
b->2,5;
c->3;
d->4;
您可以使用map<char, vector<unsigned int> >
。
#include <iostream>
#include <map>
#include <string>
#include <vector>
using namespace std;
map<char, vector<unsigned int> > storePos(string s)
{
map<char, vector<unsigned int> > charPos;
for(int i=0;i<s.size();i++)
{
auto itr = charPos.find(s[i]);
if(itr != charPos.end())
{
itr->second.push_back(i);
}
else
{
charPos[s[i]] = vector<unsigned int>(1, i);
}
}
return charPos;
}
int main(void)
{
string example = "aabcdba";
auto result = storePos(example);
for(auto itr1 = result.begin(); itr1 != result.end(); itr1 ++)
{
cout << "Letter: " << itr1->first << ", Locations: ";
for(auto itr2 = itr1->second.begin(); itr2 != itr1->second.end();
itr2 ++)
{
cout << *itr2 << " ";
}
cout << endl;
}
}
如果您真的想在原始字符串序列中存储顺序位置,则可以使用char
的无序或有序地图到vector
,其中char
是键,而vector
则可以这样做。包含位置。使用无序的地图将不是为您提供似乎正在寻求的钥匙的词典订购,但仍会为您提供准确的位置向量。
#include <iostream>
#include <string>
#include <vector>
#include <unordered_map>
int main()
{
std::string s = "aabcdba";
std::unordered_map<char, std::vector<unsigned int>> mymap;
for (unsigned i=0; i<s.size(); ++i)
mymap[s[i]].push_back(i);
for (auto const& pr : mymap)
{
std::cout << pr.first << "->";
auto it = pr.second.cbegin();
std::cout << *it;
while (++it != pr.second.cend())
std::cout << ',' << *it;
std::cout << ";n";
}
}
输出
d->4;
c->3;
b->2,5;
a->0,1,6;
如果您想要词典订购,最简单的选择是简单地使用常规订购地图。仅更改以下方式:
std::unordered_map<char, std::vector<unsigned int>> mymap;
:
std::map<char, std::vector<unsigned int>> mymap;
包括适当的标头将我们提供给我们以进行输出:
a->0,1,6;
b->2,5;
c->3;
d->4;
适合恰好您似乎正在寻找的东西。
存储位置的可能实现可以使用unordered_multimap :(可以重复关键字符)。
void storePos(string s) {
unordered_multimap<char, int>m;
for(int i=0;i<s.size();i++) {
m.insert(make_pair(s[i],i));
}
}
[编辑]但是输出可能取决于您的使用方式或打印数据。
例如,考虑使用std::multimap
而不是std::unordered_map
的使用,以填充它:
multimap<char, int>m;
void storePos(string s) {
for(int i=0;i<s.size();i++) {
m.insert(make_pair(s[i],i));
}
}
并打印数据,您可以拥有以下方法:
void printPos()
{
std::multimap<char,int>::iterator it,itup;
for (it = m.begin(); it != m.end(); )
{
cout << (*it).first << " -> ";
itup = m.upper_bound ((*it).first );
// print range [it,itup):
for (it; it!=itup; ++it)
{
cout << (*it).second << ", ";
}
cout << endl;
}
}
输出:
a -> 0, 1, 6,
b -> 2, 5,
c -> 3,
d -> 4,
尝试这个!
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 如何使用cudaMallocManaged在指针位置初始化对象?(C++)
- 无法获取webot::PositionSensor对象中位置传感器的值
- 非常量变量只读位置的赋值
- 如何定义更改car类中car位置的方法
- 使用迭代器时如何访问对象在向量中的位置?
- 更改.cpp程序的输入文件中数据的位置会意外更改输出
- 求最大元素位置的分治算法
- 你好。。。id_public变量不应该给出结果为 81 和 86 吗?为什么它为两个派生类占用不同的内存位置?
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 如何将元素添加到向量的字符串位置
- 如何选择在 csv 文件中输出的位置
- 如何在接触时重置我的角色位置?
- 为什么玩家控制器"own"偏航俯仰和滚动,但角色"owns"它的位置?
- 如何使用矢量或地图存储不同角色的位置
- 如何让OpenGL在我想要的位置绘制角色