gpt4 book ai didi

c++ - 如何检查 key 是否存在于 std::map 中并在 if 条件下获取 map::iterator?

转载 作者:行者123 更新时间:2023-11-30 00:53:01 25 4
gpt4 key购买 nike

我想在条件表达式中定义变量,以便变量范围在 if 内条款。这很好用,

if (int* x = new int(123)) { }

当我试图用 map::iterator 做类似的事情时,

if ((map<string, Property>::iterator it = props.find(PROP_NAME)) != props.end()) { it->do_something(); }

我得到了 error: expected primary-expression before ‘it’

int* 之间的区别是什么?和 map::iterator

最佳答案

int *map::iterator 在这方面没有区别。您在 int *map::iterator 中使用的周围语义结构有所不同,这就是为什么一个编译而另一个不编译的原因。

if 你可以选择其中之一

if (declaration)

if (expression)

声明不是表达式。您不能将声明用作较大表达式中的子表达式。您不能将声明用作显式比较的一部分,而这正是您试图做的。

例如,如果您尝试用 int * 做同样的事情,就像这样

if ((int* x = new int(123)) != NULL)

代码无法编译的原因与您的 map::iterator 代码无法编译的原因完全相同。

你必须使用

if (int* x = new int(123))

int* x = new int(123);
if (x != NULL)

int* x;
if ((x = new int(123)) != NULL)

正如您在上面看到的,int * 表现出与 map::iterator 完全相同的行为。

在您的示例中,不可能声明 并在if 条件下执行它与props.end() 的比较。您将不得不使用上述变体之一,即

map<string, Property>::iterator it = props.find(PROP_NAME);
if (it != props.end())

map<string, Property>::iterator it;
if ((it = props.find(PROP_NAME)) != props.end())

选择你更喜欢的那个。

附言当然,形式上你也可以这样写

if (map<string, Property>::iterator it = props.find(PROP_NAME))

但是它没有做你想做的事(不比较迭代器值和 props.end())并且可能根本不编译,因为迭代器类型可能不可转换到 bool

关于c++ - 如何检查 key 是否存在于 std::map 中并在 if 条件下获取 map::iterator?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17624247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com