我知道这是一个非常糟糕的主意,所以有关如何有效执行此操作的其他建议将很受欢迎。如果找不到密钥,则返回一个空的字符串向量
这是事情。我有map<string,vector<string> >
,我想要搜索一个键并返回其相应的值(在这种情况下是字符串的向量)。我坚持返回(而不是仅仅迭代)的原因是我需要搜索其他向量中返回的值。
一个例子明确这一点:
Input:
key1 ---> {2,3,4}
key2 ---> {1}
key3 ---> {2,12,11,9}
对于KEY1作为输入,其值2,3,4载体应被返回。现在这些2,3,4值需要在其他字符串向量中搜索。什么是最有效的方法来做到这一点?
我想是这样的:
vector<string> returnEdges(string key)
{
for (map<string, vector<string> >::iterator it=outgoing.begin();
it!=outgoing.end();++it)
{
if (key.compare((*it).first)==0)
{
return (*it).second;
}
}
//return string<;//what should I return here????
}
1)我应该如何返回键的情况下空载体是不是发现了什么?
2)实现此目的的最佳方法是什么?
我希望问题很清楚。
编辑:当我写这个问题,我想为什么不返回一个迭代器? SO的人们是否赞同这个想法?
我对这些原始指针感到有些不安。也许这种设计可能有用,但不知何故应该有更好的方法。 OP邀请解释她的目标;也许我们可以提出具体的建议。 –
@Karl,真棒真棒回答。我认为这些问题很多人都喜欢我,他们从其他语言到C++,并且无法高效/有效地使用它 – Anon
将迭代器转换为原始指针是限制接口的一种方法。然而,它仍然不会阻止递增/递减 - 它只是意味着它会中断(未定义的行为是**期望**在正常情况下崩溃,但是真正知道的是谁),而不是让用户将封装破坏为itty小块。可能更好的主意是创建一个包装类 - 一种故意愚蠢的智能指针。 :) –