1

嗨,我有这个函数可以从向量中获取唯一元素,但我想知道如何让它也让我得到这些唯一元素的数量。

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;
}
4

2 回答 2

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());
于 2013-05-23T17:39:03.070 回答
0

seller您可以创建一个包含 astring name和 an的类,而不是返回字符串向量int count。并返回一个向量。

如果您找到重复项,而不是忽略它,您可以添加count

于 2013-05-23T17:38:10.283 回答