2013-05-23 4 views
1

안녕하세요, 저는 벡터에서 고유 한 요소를 가져 오는이 함수를 가지고 있지만 어떻게 고유 요소 수를 얻을 수 있는지 궁금합니다.C++ 고유 요소 수

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; 
} 
+2

'무효 main' 법적 서명이 없습니다. – chris

+2

고유 번호 또는 고유 번호의 총 수를 각각 얼마나 많이 나타 냈습니까? – taocp

+0

std :: sort 및 std :: unique 또는 고유 요소 만 삽입하는 std :: set에 삽입합니다. 거기에서 크기 또는 모든 고유 한 요소를 얻을 수 있습니다. – dchhetri

답변

0

대신 문자열의 벡터를 반환하는, 당신은 string nameint count을 포함 seller의 클래스를 만들 수 있습니다. 그 벡터를 반환합니다.

당신은 중복을 찾을 경우, 대신 그것을 무시하고, 그냥 incriment 수 count

3

당신은 이미 목록을 가지고 있기 때문에, 그것은 크기를 쉽게 찾을 수 있습니다 : 그러나

res.size() 

을, 난 당신이 그것을 할 수있는 재 작성 알고리즘을 드롭하고 기존 하나를 사용하는 것이 좋습니다. 나는 또한 대신 out 매개 변수를 사용하는 값을 반환 제안 : 당신이 C++ (11)이없는 경우 정상적인 펑터와 그 교체 할 수 있도록

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 람다를 사용했다. 또한 GetSeller()을 기준으로 CService에 대한 동등성을 구현해야합니다. 또는 당신이 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()); 
+0

내 질문에 더 간단한 방법을 발견했습니다. 이 줄을 추가했습니다. cout << "고유 판매자 수 :"<< result.size() << endl; 내 보이드 함수의 끝을 추가하지만 어쨌든 고마워요 :) – user2374907

+0

@ user2374907, 아, 알 겠어. 나는 당신이 각각 일어난 횟수를 의미한다고 생각했다. 그럼 내 대답을 업데이트하겠습니다. – chris