对象的向量搜索未来对象的使用?
Vector of objects search for future objects' use?
我有数据文件,这是读到一个向量。例子:
West Ham 38 12
Leicester City 38 13
在实际文件中,名称后面有更多的双精度值。无论如何,以前我使用过这种搜索:
vector<Team>newTeams; //vector of Team objects
string homeName;
cout << "Enter home team name: ";
cin >> homeName;
cout << endl;
Team ht;
for(Team team : newTeams)
{
if(team.getName() == homeTeam)
{
ht = team;
}
}
基本上,我遍历一个向量,寻找一个特定的团队名称。如果我找到了团队名称,我就分配给他们。然后,我将使用ht来获取所需的数据,即:
ht.getHomeGamesPlayed();
ht.getPoints();
ht.getHomeGoalsScored();
所以,我的问题是:有没有更好的搜索方式?(使用map of names + vector of double ?):
map<name, vector<doubles>>;
另外,如何使搜索大小写不敏感?也就是说,我输入leicester而不是leicester CIty, leicester CIty仍然会被选中?
乌利希期刊指南:好像我弄明白了,如果你感兴趣的话,下面是代码:
string homeName;
cout << "Name: " << endl;
cin >> homeName;
Team ht;
for (Team team : dataTable) {
if (strstr(team.getName().c_str(), homeName.c_str()))
{
ht = team;
}
}
当我输入Leic时,它会选择Leicester City(当我输入Leic时,它不起作用)
是的,std::map
将更适合您的问题。std::unordered_map
也是。
要获得不区分大小写的匹配,可以使用已转换为全大写或全小写的字符串作为映射键。然后将原始名称单独存储。
std::map<std::string, std::pair<std::string, std::vector<double>>> mymap;
如果你需要部分匹配,例如,当你输入leicester
时找到Leicester City
,你现在使用的向量方法可能是最好的。如果您只需要匹配名称的第一个部分,您仍然可以使用std::map
和map::lower_bound
来查找搜索的起始位置。
这个问题有几个解决方案。我建议使用具有多个输入位置的基数树。
首先,创建一个map或set之类的来存放对象。然后,创建一个基数树,索引给定宽度的每个部分匹配,例如
中的fge
为"abcde fge", "bcde fge", "cde fge",…"e"。指向你的(多)地图值。您可以使用基数树的属性,您可以轻松地找到具有给定前缀的所有值来执行快速搜索,以便在大约O(1)(或在N个大小的搜索项中O(N))内找到给定子字符串的所有匹配,前提是您有固定的输入大小。但是请注意,树的构建规模为可搜索材料大小的O(n^2),为了解决这个问题,您可以限制索引的搜索词的大小(例如50个字符),或者在多次搜索之后进行增量索引(例如索引"abcdefg"cdefg"answers"efg",然后在搜索"def"时搜索"def"answers"ef","ef"的结果与efg的前缀匹配)
请注意,搜索字符串必须至少与您跳过的宽度一样长,否则您将不得不搜索整个树。
- 什么时候调用组成单元对象的析构函数
- 对RValue对象调用的LValue ref限定成员函数
- CMake-按正确顺序将项目与C运行时对象文件链接
- 空基优化子对象的地址
- 将对象数组的引用传递给函数
- 你能重载对象变量名本身返回的内容吗
- C++使用整数的压缩数组初始化对象
- 找不到成员对象:没有名为get_event()的成员,也处理多态性和向量
- 将对象移动到std::shared_ptr
- 代理对象的常量正确性
- 在Linux中哪里可以找到互斥、未来等的源代码
- 提升 ASIO 无法识别计时器对象
- 将Ref对象作为类成员
- 将包含C样式数组的对象初始化为成员变量(C++)
- 如何返回一个类的两个对象相加的结果
- 如何在不引入未来对象切片的情况下实现 ICloneable
- 如何在获得未来值后重用 boost::p romise 对象
- 从未来对象数组std::vector中检索值
- 对象的向量搜索未来对象的使用?
- 为什么我的线程调用函数对象而不是将其返回值分配给packaged_task的未来对象