我相信我可以说......
for (int i = 0; i < noun[].size(); i++)
{
if ( word[0] == noun[i])
{ //do something }
}
问题是,我需要用很多单词多次这样做。有时我想一次做很多话。就像if (words[0] == noun[/*any*/] && words[1] == verb [/*any*/])
有没有办法告诉它检查数组/向量中的每个元素?
或许有一些容器类似于允许快速查找的数组?
我只能在Phyton中找到一种方法,但是我从未在Phyton中编程,所以我想在C ++中使用它。
在Phyton,我发现了这样的事情:
a = [1,2,3,4,5]
b = 4
if b in a:
print("True!")
else:
print("False")
答案 0 :(得分:1)
除非有一个关于某个元素的位置的规则暗示另一个元素的位置(如果存在),否则检测存在的算法必须为O(N)。< / p>
例如,如果向量已排序,那么就会有一个好的定位规则,并且有很多O(log(N))算法:std::lower_bound
就是这样的算法功能
答案 1 :(得分:0)
矢量容器未针对查找进行优化。你需要的可能需要一套。我建议您检查此question的答案。
答案 2 :(得分:0)
考虑到您的示例包括verb
和noun
,您将尝试在(实际上)固定的字典中查找单词。为此目的,有许多优化的容器。
标准库包含std::set<>
,std::set<std::string> nouns
可用。它有O(log N)查找。效率稍高,还有std::unordered_map<>
,这仍然足以满足您的需求 - 您只需要知道名词列表中是否出现单词,而不是下一个名词是什么。
标准库外部有更多数据结构。 trie aka前缀树共享其条目的前缀,这是节省空间的。