2014-10-13 3 views
0

의 벡터에서 임의의 구조체를 선택합니다. 벡터에서 2 임의의 구조체를 선택하고 무작위로 선택한 구조체의 각 요소를 표시하려면 : km1, km2, km3내가 구조체의 벡터를 가지고 구조체

비슷한 질문을 ints 및 didnt 반환했습니다 어떤 이유로 든 무작위 구조체. 선택 덕분에

+0

두 구조체가 달라야합니까, 아니면 무작위 선택이 둘 다 동일한 구조체 값을 선택할 수 있습니까? – cdhowie

+0

@cdhow 우리는 k-means 알고리즘을위한 클러스터를 선택하기 때문에 다른 사람들이 필요합니다 – GeorgeCostanza

+0

@GeorgeCostanza는 우리가''rand()''를 사용할 수 있습니까 – Winestone

답변

1

두 사람은 오히려 간단하다

template <typename Iterator, typename Engine> 
std::tuple<Iterator, Iterator> pick_two(Iterator begin, Iterator end, Engine & engine) 
{ 
    int size = end - begin; 

    if (size < 2) { 
     throw std::invalid_argument("Sequence does not contain two elements"); 
    } 

    std::uniform_int_distribution<int> distribution(0, size - 1); 

    int first = distribution(engine); 
    int second; 

    do { 
     second = distribution(engine); 
    } while (first == second); 

    return std::make_tuple(begin + first, begin + second); 
} 

당신은 글로벌 std::default_random_engine random_engine; 주어진 다음과 같이 호출 할 수 있습니다, 그리고 벡터 v 전화 :

auto choices = pick_two(v.begin(), v.end(), engine); 

당신은 첫 번째 구조체를 얻을 수 있습니다 값은 *(std::get<0>(choices))이고 두 번째 값은 *(std::get<1>(choices))이며 원하는 값을 사용하여 값을 출력하십시오.

+0

어떤 헤더를 포함시킬 수 있습니까? 같은 물건을 받고 : 네임 스페이스 std default_random_engine 형식을 지정하지 않습니다 , 오류 : uniform_int_distribution std의 구성원이 아닙니다 : 오류 :이 범위에서 엔진이 선언되지 않았습니다. 오류 : <식 오류>에서 자동을 추론 할 수 없습니다 – GeorgeCostanza

+0

@GeorgeCostanza' '#include ''나는 생각한다. – Winestone

+0

@winestone yea i random이 포함되어있다. 나는이 체크 표시를주고 싶다. 나는 컴파일 할 코드를 얻을 수 없다. – GeorgeCostanza

관련 문제