Как я могу использовать iptables на centos 7? [закрыто]

Вы можете создать пользовательскую функцию сравнения, которая будет использоваться с std::sort. Эта функция должна была бы проверить, начинается ли строка с числового значения. Если это так, преобразуйте числовую часть каждой строки в int, используя некоторый механизм, такой как stringstream. Затем сравните два целочисленных значения. Если значения сравниваются одинаково, сравните нечисловую часть строк лексикографически. В противном случае, если строки не содержат числовую часть, просто сравните две строки лексикографически, как обычно.

В принципе, что-то вроде следующей (непроверенной) функции сравнения:

bool is_not_digit(char c)
{
    return !std::isdigit(c);
}

bool numeric_string_compare(const std::string& s1, const std::string& s2)
{
    // handle empty strings...

    std::string::const_iterator it1 = s1.begin(), it2 = s2.begin();

    if (std::isdigit(s1[0]) && std::isdigit(s2[0])) {
        int n1, n2;
        std::stringstream ss(s1);
        ss >> n1;
        ss.clear();
        ss.str(s2);
        ss >> n2;

        if (n1 != n2) return n1 < n2;

        it1 = std::find_if(s1.begin(), s1.end(), is_not_digit);
        it2 = std::find_if(s2.begin(), s2.end(), is_not_digit);
    }

    return std::lexicographical_compare(it1, s1.end(), it2, s2.end());
}

И затем ...

std::sort(string_array.begin(), string_array.end(), numeric_string_compare);

EDIT: Конечно, этот алгоритм полезен, только если вы сортируете строки, где числовая часть появляется в начале строки. Если вы имеете дело со строками, где числовая часть может отображаться в любом месте в строке, то вам нужен более сложный алгоритм. Дополнительную информацию см. В http://www.davekoelle.com/alphanum.html .

140
задан Tshepang 12 September 2014 в 09:37
поделиться