sam*_*moz 33 c++ sorting string vector
我有一堆字符串需要排序.我认为std :: vector将是最简单的方法.但是,我之前从未使用过矢量,所以想要一些帮助.
我只需要按字母顺序对它们进行排序,没什么特别的.实际上,string :: compare函数可以工作.
之后,我如何迭代它们来验证它们是否已经排序?
这是我到目前为止所拥有的:
std::sort(data.begin(), data.end(), std::string::compare);
for(std::vector<std::string>::iterator i = data.begin(); i != data.end(); ++i)
{
printf("%s\n", i.c_str);
}
Run Code Online (Sandbox Code Playgroud)
Joh*_*itb 66
你可以这样做
std::sort(data.begin(), data.end());
Run Code Online (Sandbox Code Playgroud)
它会排序你的字符串.然后通过它们检查它们是否有序
if(names.empty())
return true; // empty vector sorted correctly
for(std::vector<std::string>::iterator i=names.begin(), j=i+1;
j != names.end();
++i, ++j)
if(*i > *j)
return false;
return true; // sort verified
Run Code Online (Sandbox Code Playgroud)
特别是,std::string::compare
不能用作比较器,因为它不能做sort
它想做的事情:如果第一个参数小于第二个参数,则返回true,否则返回false.如果您使用sort
上面的内容,它将只使用operator<
,这将完全相同(即使std::string
它返回first.compare(second) < 0
).
问题到底是什么?似乎一切都已经在那里了。
但是,您可能应该使用std::cout << *i << std::endl;
i
是一个迭代器==指向容器中数据的指针,所以*
需要c_str()
是函数std::string
而不是变量您的代码中的问题与您的问题无关?
给你一些提示:
std::vector
还覆盖[]
运算符,因此您可以节省迭代器的麻烦并将其像数组一样使用(从0
to迭代vector.size()
)。std::set
它,它在插入时自动排序(二叉树),因此您可以节省额外的排序。copy(V.begin(), V.end(), ostream_iterator<std::string>(cout, "\n"));