>

나는 고전을하려고합니다리스트의 모든 조합문제가 있으며 포럼 에서이 코드를 발견했습니다. 그러나 조합을 N 요소로 제한하고 싶습니다. 비슷한 스레드가 많이 있지만 아직 찾지 못했습니다.단순한이 문제에 대한 해결책. 새로운 코드 줄을 추가 할 필요가없는 간단한 해결책이 있습니까?

std::string next() {
    int n = 2; // Will only give me combinations of length 2
    std::vector<std::string> arr = { "a", "b", "c", "d", "e" };
    std::sort(arr.begin(), arr.end()); 
    do {
        for(auto& i: arr)
            std::cout << i;
        std::cout << '\n';
    } while(std::next_permutation(arr.begin(), arr.end()));  
}

  • 답변 # 1

    가장 간단한 방법은 순열의 처음 두 요소 만 사용하고 중복을 건너 뛰는 것입니다. 고유성을 가지려면 std::set :

    #include <vector>
    #include <iostream>
    #include <algorithm>
    #include <set>
    
    void next() {
        int n = 2; // Will only give me combinations of length 2
        std::vector<std::string> arr = { "a", "b", "c", "d", "e" };
        std::sort(arr.begin(), arr.end()); 
        
        std::set<std::vector<std::string>> result;
        
        do {
            result.emplace(arr.begin(),arr.begin()+n);
        } while(std::next_permutation(arr.begin(), arr.end()));  
        for (const auto& c : result) {
            for (const auto& e : c) std::cout << e ;
            std::cout << '\n';
        }
    }
    int main() {
        next();
    }
    
    

    산출:

    ab
    ac
    ad
    ae
    ba
    bc
    bd
    be
    ca
    cb
    cd
    ce
    da
    db
    dc
    de
    ea
    eb
    ec
    ed
    
    

    추신 : 귀하의 함수는 std::string 그러나 아무것도 반환하지 않습니다. 이것은 정의되지 않은 동작입니다. 실행하려고 할 때 이중 무료 런타임 오류가 발생했습니다.

  • 이전 cdo climate - cdo에서 이중선 보간을 사용하여 NetCDF 파일 리그 리딩
  • 다음 python - 웹 사이트의 형식 차단기가 Scrapy 스파이더를 중지시킵니다