Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从字符串列表中查找最快的字符串_C++_C++11_Data Structures_Stl - Fatal编程技术网

C++ 从字符串列表中查找最快的字符串

C++ 从字符串列表中查找最快的字符串,c++,c++11,data-structures,stl,C++,C++11,Data Structures,Stl,我有一个字符串列表,我必须找出该列表中是否存在字符串。我想在低延迟定价引擎中使用逻辑,所以我想为它提供真正快速的逻辑。 我考虑将这些字符串作为键存储在map中,然后可以使用find()或count()函数来实现相同的功能。 有人能提出其他更有效的逻辑吗?我刚才想到的另一种方法是 将字符串列表放在以分号分隔的字符串中,然后使用strfind e、 g 字符串列表, l_czEIDHolder=“ABC;DEF;GHI;JKL;MNO;PQRS;LMNOPQR;STUVW;XY;Z” 如果字符串\u

我有一个字符串列表,我必须找出该列表中是否存在字符串。我想在低延迟定价引擎中使用逻辑,所以我想为它提供真正快速的逻辑。 我考虑将这些字符串作为键存储在map中,然后可以使用find()或count()函数来实现相同的功能。
有人能提出其他更有效的逻辑吗?

我刚才想到的另一种方法是

将字符串列表放在以分号分隔的字符串中,然后使用strfind

e、 g

字符串列表,
l_czEIDHolder=“ABC;DEF;GHI;JKL;MNO;PQRS;LMNOPQR;STUVW;XY;Z”
如果字符串\u到\u search=“PQRS”
使string_to_search=string_to_search+“;”
strfind(czEIDHolder,字符串搜索)或
字符串::查找(czEIDHolder,字符串搜索)

我刚才想到的另一个方法是

将字符串列表放在以分号分隔的字符串中,然后使用strfind

e、 g

字符串列表,
l_czEIDHolder=“ABC;DEF;GHI;JKL;MNO;PQRS;LMNOPQR;STUVW;XY;Z”
如果字符串\u到\u search=“PQRS”
使string_to_search=string_to_search+“;”
strfind(czEIDHolder,字符串搜索)或
字符串::查找(czEIDHolder,字符串搜索)
可能是适合您需要的选择。然后使用
find()
检查字符串是否存在。类似于:

#包括
#包括
#包括
int main(){
无序设置myset{“红色”、“绿色”、“蓝色”};
std::cout>输入;
自动位置=myset.find(输入);
如果(pos!=myset.end())
std::cout可能是适合您需要的选择。然后您可以使用
find()
检查字符串是否存在。类似于:

#包括
#包括
#包括
int main(){
无序设置myset{“红色”、“绿色”、“蓝色”};
std::cout>输入;
自动位置=myset.find(输入);
如果(pos!=myset.end())


STD:是的,Ali,我的代码是C++代码。我刚刚添加了逻辑的伪代码。100%回答了我的问题。我还发现了我的SrFund()这种方法也不是很有效……因为它的传统C字符串处理方式比较慢。@BhupeshPant好的,我很高兴它能帮上忙。我添加了一些示例代码。如果我们有没有任何重复项的整数,你会有什么建议?从数据结构上看,我会说普通的二叉树可以。但是应该使用哪个stl类呢被使用?我对STL世界完全陌生,所以如果我问了一些非常基本的问题,我很抱歉。@BhupeshPant这也取决于你如何使用它。要么是
无序集
,要么是带
下限()如果你想要一棵树,那么<代码> SET<代码>,虽然这可能是最慢的WRT查找。是的,Ali,我的代码是C++代码。我刚刚添加了逻辑的伪代码。100%回答了我的问题。我也发现了我的SrFund()这种方法也不是很有效……因为它的传统C字符串处理方式比较慢。@BhupeshPant好的,我很高兴它能帮上忙。我添加了一些示例代码。如果我们有没有任何重复项的整数,你会有什么建议?从数据结构上看,我会说普通的二叉树可以。但是应该使用哪个stl类呢被使用?我对STL世界完全陌生,所以如果我问了一些非常基本的问题,我很抱歉。@BhupeshPant这也取决于你如何使用它。要么是
无序集
,要么是带
下限()
。如果你想要一棵树,那么
设置
,尽管这可能是最慢的wrt查找。-1复杂的解决方案。如果搜索字符串包含建议的分隔符(分号),则会失败。此外,由于你要求的是快,慢不是答案(O(1)与O(n))。因此,我确信它不会包含该分隔符。我只接受您的第二点(-1)…感谢您的答复。如果您的搜索字符串与尾部匹配(但不是整个字符串),也会失败。这不是一个解决方案。接受你的所有观点。但在我选择这种方式后,你的所有观点都会得到考虑。C在处理字符串方面非常糟糕。C提供的所有字符串函数都不被认为是有效的。这就是为什么我们有std::string像其他语言一样有效地处理字符串操作。所以choi有了他以上的解决方案的CE已经被排除,如果你已经阅读了我的主要意图,就是要达到效率。谢谢你的发现。非常感谢。 STD::String 是用C字符串处理函数来实现的。C++是,如果有的话,效率较低。你需要熟悉一个剖析器。即使它更快。答案提出了一个缓慢的算法。使用
无序_集
的查找是平均分摊常数时间,最坏情况下是线性时间。您的查找始终是线性时间。当然,这可以通过不使用字符串作为ID来进一步优化。与整数比较相比,字符串比较本质上是缓慢的。-1卷积解决方案。Th如果您的搜索字符串包含建议的分隔符(分号),at将失败。另外,由于您要求的是快速,慢速不是答案(O(1)vs.O(n))。因此,我确信它不会包含该分隔符。我只接受您的第二点(-1)…谢谢您的答复。如果您的搜索字符串与结尾匹配,也将失败(但不是整个字符串)。这不是一个解决方案。接受你的所有观点。但在我选择这种方式后,你的所有观点都会得到考虑。C在处理字符串方面非常糟糕。C提供的所有字符串函数都不被认为是有效的。这就是为什么我们有std::string像其他语言一样有效地处理字符串操作。所以choi已经排除了使用上述解决方案的可能性,如果您已经阅读了我的主要意图,那就是实现效率。感谢您的发现。非常感谢。
std::string
是根据C strin实现的
List of string, <ABC,DEF,GHI,JKL,MNO,PQRS,LMNOPQR, STUVW,XY,Z>
l_czEIDHolder = “ABC;DEF;GHI;JKL;MNO;PQRS;LMNOPQR; STUVW;XY;Z”
if  string_to_search = “PQRS”
make string_to_search = string_to_search +”;”
strfind(czEIDHolder, string_to_search) OR
string::find(czEIDHolder, string_to_search)
#include <iostream>
#include <string>
#include <unordered_set>

int main() {

  std::unordered_set<std::string> myset{ "red", "green", "blue" };

  std::cout << "color? ";
  std::string input;
  std::cin >> input;

  auto pos = myset.find(input);

  if (pos != myset.end())
    std::cout << *pos << " is in myset\n";
  else
    std::cout << "not found in myset\n";

}