Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C+中对字符串进行排序+;使用运算符<; 以下数组用C++代码给出: char strings[105][105]; P> >编写< 操作符> P> > > > C++ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > P> >没有编写“运算符> P > >代码,代码看起来像C代码,而不是C++,它使用 STD::String < /P>_C++_String_Sorting_Stl_Operators - Fatal编程技术网

在C+中对字符串进行排序+;使用运算符<; 以下数组用C++代码给出: char strings[105][105]; P> >编写< 操作符> P> > > > C++ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > P> >没有编写“运算符> P > >代码,代码看起来像C代码,而不是C++,它使用 STD::String < /P>

在C+中对字符串进行排序+;使用运算符<; 以下数组用C++代码给出: char strings[105][105]; P> >编写< 操作符> P> > > > C++ > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > P> >没有编写“运算符> P > >代码,代码看起来像C代码,而不是C++,它使用 STD::String < /P>,c++,string,sorting,stl,operators,C++,String,Sorting,Stl,Operators,没有办法编写操作符假设你真的需要对2D数组按行排序,那么让std::sort()为你这样做有点困难,即使给你一个工作的comparer functor:它需要某种迭代器适配器 但是,您可以轻松使用其他就地排序算法,例如选择排序: #include <iostream> #include <algorithm> #include <string> template<int N> bool char_array_less(const char(&am

没有办法编写
操作符假设你真的需要对2D数组按行排序,那么让
std::sort()
为你这样做有点困难,即使给你一个工作的comparer functor:它需要某种迭代器适配器

但是,您可以轻松使用其他就地排序算法,例如选择排序:

#include <iostream>
#include <algorithm>
#include <string>

template<int N>
bool char_array_less(const char(&l)[N], const char(&r)[N])
{
   return std::char_traits<char>::compare(&l[0], &r[0], N) < 0;
// for a more general solution
// return std::lexicographical_compare(&l[0], &l[0]+N, &r[0], &r[0]+N);
}

template<int N>
void swap_char_arrays( char(*l)[N], char(*r)[N])
{
    std::swap_ranges(&(*l)[0], &(*l)[0]+N, &(*r)[0]);
}

const int ROWS = 105;
const int COLS = 105;
int main()
{
    char a[ROWS][COLS] = {"foo", "bar", "whatever" };

    for(char(*i)[COLS] = a; i != a+ROWS; ++i)
        swap_char_arrays(i,
                         std::min_element(i, a+ROWS, char_array_less<COLS>));

    for(int i=0; i<ROWS; ++i)
        std::cout << a[i] << '\n';
}
#包括

#include

假设您确实需要对2D数组按行排序,那么要让
std::sort()
为您这样做有点困难,即使给定了一个工作的comparer functor:它也需要某种迭代器适配器

但是,您可以轻松使用其他就地排序算法,例如选择排序:

#include <iostream>
#include <algorithm>
#include <string>

template<int N>
bool char_array_less(const char(&l)[N], const char(&r)[N])
{
   return std::char_traits<char>::compare(&l[0], &r[0], N) < 0;
// for a more general solution
// return std::lexicographical_compare(&l[0], &l[0]+N, &r[0], &r[0]+N);
}

template<int N>
void swap_char_arrays( char(*l)[N], char(*r)[N])
{
    std::swap_ranges(&(*l)[0], &(*l)[0]+N, &(*r)[0]);
}

const int ROWS = 105;
const int COLS = 105;
int main()
{
    char a[ROWS][COLS] = {"foo", "bar", "whatever" };

    for(char(*i)[COLS] = a; i != a+ROWS; ++i)
        swap_char_arrays(i,
                         std::min_element(i, a+ROWS, char_array_less<COLS>));

    for(int i=0; i<ROWS; ++i)
        std::cout << a[i] << '\n';
}
#包括


#include

您不能重载
运算符您不能重载
运算符这看起来像是个家庭作业问题。为什么要对字符数组使用stl排序?不使用std::strings?什么字符串。我没有看到任何字符串(只是一个大的(2-D)字符数组)。@Leonid:您是否分析并证明了
std::string
对于您的使用来说太慢了?要使用std::sort,您需要编写自己的专用迭代器,将数组用作这些成员,并提供一些漂亮的复制解决方案。正如已经说过几次的那样,现在std::string将更易于编写和维护,并且可能更高效。这看起来像是一个家庭作业问题。为什么要将stl排序与字符数组一起使用?不使用std::strings?什么字符串。我没有看到任何字符串(只是一个大的(2-D)字符数组)。@Leonid:您是否分析并证明了
std::string
对于您的使用来说太慢了?要使用std::sort,您需要编写自己的专用迭代器,将数组用作这些成员,并提供一些漂亮的复制解决方案。正如已经说过多次的那样,现在std::string将更易于编写和维护,并且可能更高效。目标是使用STL中的
sort
函数,这在C中是不可用的。由于迭代器的工作方式,这可能是不可能的<代码>标准::字符串
提供了我希望避免的不必要的开销。在
结构中包装字符数组
提供了一种使用
排序
函数重载
operator@Leonid您是否分析并表明
std::string
的速度和您认为的一样慢,并且是应用程序中的一个实际瓶颈?更简单的程序(例如使用诸如
string
之类的抽象)奇怪的是,由于您能够专注于高级算法而不是低级细节,所以性能往往会更好。在我的例子中,
std::string
必须进行动态内存分配,我希望通过使用静态字符数组来避免这种情况。就这个问题而言,我一点也不想找出哪个更快。我很好奇是否可以对字符数组使用
排序
。@Leonid:动态内存分配允许简单地交换字符串的内部指针,而不是来回复制所有这些字符。请记住,
std::string
通常不会对短字符串使用动态分配(动态分配的成本超过了它的好处)。目标是使用STL中的
sort
函数,这在C中是不可用的。由于迭代器的工作方式,这可能是不可能的<代码>标准::字符串
提供了我希望避免的不必要的开销。在
结构中包装字符数组
提供了一种使用
排序
函数重载
operator@Leonid您是否分析并表明
std::string
的速度和您认为的一样慢,并且是应用程序中的一个实际瓶颈?更简单的程序(例如使用诸如
string
之类的抽象)奇怪的是,由于您能够专注于高级算法而不是低级细节,所以性能往往会更好。在我的例子中,
std::string
必须进行动态内存分配,我希望通过使用静态字符数组来避免这种情况。就这个问题而言,我一点也不想找出哪个更快。我很好奇是否可以对字符数组使用
排序
。@Leonid:动态内存分配允许简单地交换字符串的内部指针,而不是来回复制所有这些字符。请记住,
std::string
通常不会对短字符串使用动态分配(动态分配的成本大于其好处)。