嗨我有这个函数可以从向量中获取唯一元素,但我想知道如何才能让它获得这些独特元素的数量。
void getUniqueSellers(vector<string> & result) {
vector<CService>::iterator i= m_vData.begin();
while(i != m_vData.end()) {
if(find(result.begin(), result.end(), (*i).GetSeller()) == result.end()) {
result.push_back((*i).GetSeller());
}
i++;
}
}
void main()
{
vector<string> res;
myAnalyzer.getUniqueSellers(res);
vector<string>::iterator i=res.begin();
while(i!=res.end()) {
cout<< *i<<",";
i++;
}
system("pause");
return;
}
答案 0 :(得分:3)
由于您已经有了它们的列表,因此很容易找到它的大小:
res.size()
但是,我建议您删除重新创建的算法来执行此操作并使用现有算法。我还建议你返回一个值,而不是使用out参数:
std::vector<std::string> getUniqueSellers() {
std::sort(m_vData.begin(), m_vData.end());
m_vData.erase(std::unique(m_vData.begin(), m_vData.end()), m_vData.end());
std::vector<std::string> res;
std::transform(m_vData.begin(), m_vData.end(), std::back_inserter(res), [](const CService &cs) {return cs.GetSeller();});
return res;
}
我使用的是C ++ 11 lambda,所以如果你没有C ++ 11,你可以用普通的仿函数替换它。这还要求您基于CService
实现GetSeller()
的相等性。或者,如果您不想修改m_vData
,则可以复制或使用std::set
:
std::set<std::string> res;
std::transform(m_vData.begin(), m_vData.end(), std::back_inserter(res), [](const CService &cs) {return cs.GetSeller();});
return std::vector(res.begin(), res.end());
答案 1 :(得分:0)
您可以创建一个包含seller
和string name
的{{1}}类,而不是返回字符串向量。并返回该向量。
如果您发现重复,而不是忽略它,您只能实施int count