任何人都可以帮助我使这个功能更有效
Can anyone help me make this function more efficient
,所以我正在尝试通过unordered_map容器进行排序。容器从文件列表中读取输入。文件中的每一行都像rCB, bIA
一样,将其作为地图中的元素存储。每个元素中的第二个字符串是指向列表中下一个人的指针,因此以后它将再次出现在新行中,在这种情况下:bIA,TDV
。
到目前为止,我可以通过创建unordered_map迭代器并在查找函数中使用第二个字符串来按顺序进行整理,以供迭代器转到下一个元素。我的问题是另一回事。我能够以相反的方式进行分类,但是我实施解决方案的方式意味着最终需要很长时间,因为我们有300万人的输入文件。
list<string> SortEast(unordered_map<string, string> &TempUMap, unordered_map<string, string>::iterator IT, list<string> &TempList)
{
IT = TempUMap.begin();
while (TempList.size() != (TempUMap.size() + 1))
{
if (IT->second == TempList.front())
{
TempList.emplace_front(IT->first);
IT = TempUMap.begin();
}
IT++;
}
return TempList;
}
我试图使它更加有效,但我想不出如何。如果我能找到在列表开始时会出现的值,我可以从该值开始,但我再也不知道如何轻松找到这个值。
任何帮助将不胜感激。
编辑:我们输入之一的样本是:
rBC,biA
vnN,CmR
CmR,gnz
Dgu,OWn
lnh,Dgu
OWn,YMO
YMO,SIZ
XbL,Cjj
TDV,jew
iVk,vnN
wTb,rBC
jew,sbE
sbE,iVk
Cjj,wTb
AGn,XbL
gnz,SMz
biA,TDV
SIZ,uvD
SMz,lnh
这只有20个人。在这种情况下,AGn
是第一个值,而uvD
是最后一个值。我最终得到的输出是:
AGn
XbL
Cjj
wTb
rBC
biA
TDV
jew
sbE
iVk
vnN
CmR
gnz
SMz
lnh
Dgu
OWn
YMO
SIZ
uvD
此文件以rBC
开头,这就是我需要向后分类
您不能简单地做这样的事情:
vector<string> orderAllTheNames(const unordered_map<string, string>& input, const string& begin)
{
vector<string> result;
result.reserve(input.size());
string current = begin;
result.push_back(current);
while(result.size() < input.size())
{
current = input[current];
result.push_back(std::move(current));
}
return result;
}
我在手机上输入此内容时可能会错过一些细节。如果您担心过多的副本,您可以添加一些指针和/或STD ::移动。
我猜它与您的解决方案相同,但没有尴尬的列表和emplace_front。
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 欧拉项目#8答案是大以获得有效答案
- 带内存和隔离功能的SQLite
- 调整大小后指向元素值的指针unordered_map有效?
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 为什么是0;C++中的有效语句
- 最高有效数字侧的第N位
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- 用于检查我们是否有有效数独的辅助功能
- 任何人都可以帮助我使这个功能更有效
- 在外部功能中具有一个变量初始化或内部功能中的多个初始化是最有效的
- IS STD ::功能与使用自动一样有效
- 如何以有效的方式使用boost mpi广播功能
- 在班级基础中实现功能的最有效方法
- STD :: SET的有效比较功能
- 为什么使用此已删除的功能有效
- 如何有效地表达此功能