在C ++中是否有类似于Python的“in”函数?

时间:2013-07-14 23:33:01

标签: c++ python

我最近只处理Python编程,他们是一个非常有用的内置函数,名为“'in'

'in'允许您访问变量中的所有元素。

例如;

def main():
y = ["Yes", "yes", "YES",]
n = ["No", "no", "NO"]
print "yes or no?\n"
response = raw_input()
if response in y:
    print "Wonderful, your response was ", response, "\n"
    exit(0)
if response in n:
    print "Alas, your response was ", response, "\n"
    exit(0)
else:
    print "Message not read; please attempt again.\n"
    main()

main()

正如您所看到的,它使用'in'函数来检查字典中的字符串。

我想知道标准C ++库中是否存在与此函数等效的内容?

4 个答案:

答案 0 :(得分:3)

有功能

std::find(std::begin(a), std::end(a), needle) != std::end(a)

其中a是数组或std::vectorstd::list

但在这种情况下,您还可以使用std::setstd::unordered_set。 (如果有很多元素,你应该这样做)

s.find(needle) != s.end()

答案 1 :(得分:1)

除了其他人提到的方式之外,还有std::binary_search可以说是名字很糟糕。如果元素存在则返回true,否则返回false。您需要一个已排序的容器来使用它。

bool found = std::binary_search(std::begin(container), std::end(container), element);

答案 2 :(得分:0)

如果您使用的是C ++载体:

if (std::find(vector.begin(), vector.end(), yourItem)!=vector.end() )
....

将等同于

if yourItem in vector:

答案 3 :(得分:0)

许多std个容器都有一个名为find的函数。但是,要获得实际性能,您需要使用std::unordered_set(C ++ 11),因为它在底层实现中使用哈希表,使find()操作在恒定时间内,而其他容器在线性时间内完成。