0

std::sort に渡せるように比較関数を定義したいと思います。以下の「compare_by_x」関数で示されているように、ベクトル x の順序に基づいて比較を行う必要があります。

template <std::vector<double> x>
bool compare_by_x(int i, int j){
  return x[i] <= x[j];
}

次のようにcompare_by_x関数を渡したいです。これは機能していません。

std::sort(some_index_vector.begin(), some_index_vector.end(), compare_by_x<x>);
4

2 に答える 2

4

オブジェクト参照をテンプレートまたは関数に渡すことはできません。ただし、それらを構造体に渡すことはできます。

これが実際の例です:

#include <iostream>
#include <vector>
#include <algorithm>

struct compare_by_x
{
    std::vector<double>& x;
    compare_by_x(std::vector<double>& _x) : x(_x) {}

    bool operator () (int i, int j)
    {
        return x[i] <= x[j];
    }
};

int main(int argc, const char *argv[])
{
    std::vector<double> some_index_vector;
    some_index_vector.push_back(0);
    some_index_vector.push_back(1);
    some_index_vector.push_back(2);
    std::vector<double> x;
    x.push_back(3);
    x.push_back(1);
    x.push_back(2);

    std::sort(some_index_vector.begin(), some_index_vector.end(), compare_by_x(x));

    for (std::vector<double>::const_iterator it = some_index_vector.begin(); it != some_index_vector.end(); ++it)
    {
        std::cout << *it << ' ';
    }
    std::cout << std::endl;

    return 0;
}
于 2013-06-28T09:49:04.643 に答える