Back to Documentations

Signature Description Parameters
template<typename T, typename C = std::less<T>>
size_type
inversion_count(const char *col_name) const;
This returns the number of inversions in the named column.
For example, in a column that is already sorted, the number of inversions is zero. In a column that is sorted in reverse, the number of inversions is n(n - 1) / 2.
T: Data type of the named column
C: Type of the comparison functor defaulted to std::less
col_name: Name of the column
static void test_inversion_count()  {

    std::cout << "\nTesting inversion_count(  ) ..." << std::endl;

    using IntDataFrame = StdDataFrame<int>;

    std::vector<int>    idx = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 };
    std::vector<int>    i1 = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 };
    std::vector<int>    i2 = { 17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0 };
    std::vector<int>    i3 = { 1,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17 };
    std::vector<int>    i4 = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,16 };
    std::vector<int>    i5 = { 1,0,2,3,4,5,6,7,8,9,10,11,12,13,14,15,17,16 };
    std::vector<int>    i6 = { 17,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,0 };
    std::vector<int>    i7 = { 0,1,2,3,4,5,6,10,8,9,7,11,12,13,14,15,16,17 };
    std::vector<int>    i8 = { 0,1,2,15,4,5,6,7,8,9,10,11,12,13,14,3,16,17 };
    std::vector<int>    i9 = { 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2 };
    std::vector<int>    i10 = { 2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,3 };
    std::vector<int>    i11 = { 2,2,2,2,3,2,2,2,2,4,2,2,2,5,2,2,2,6 };
    IntDataFrame        df;

    df.load_data(std::move(idx),
                 std::make_pair("i1", i1),
                 std::make_pair("i2", i2),
                 std::make_pair("i3", i3),
                 std::make_pair("i4", i4),
                 std::make_pair("i5", i5),
                 std::make_pair("i6", i6),
                 std::make_pair("i7", i7),
                 std::make_pair("i8", i8),
                 std::make_pair("i9", i9),
                 std::make_pair("i10", i10),
                 std::make_pair("i11", i11));

    assert(df.inversion_count<int>("i1") == 0);
    assert(df.inversion_count<int>("i2") == 153);
    assert(df.inversion_count<int>("i3") == 1);
    assert(df.inversion_count<int>("i4") == 1);
    assert(df.inversion_count<int>("i5") == 2);
    assert(df.inversion_count<int>("i6") == 33);
    assert(df.inversion_count<int>("i7") == 5);
    assert(df.inversion_count<int>("i8") == 23);
    assert(df.inversion_count<int>("i9") == 153);
    assert(df.inversion_count<int>("i10") == 136);
    assert(df.inversion_count<int>("i11") == 110);

    assert((df.inversion_count<int, std::greater<int>>("i1") == 153));
    assert((df.inversion_count<int, std::greater<int>>("i2") == 0));
}

C++ DataFrame