【发布时间】:2020-02-26 19:12:30
【问题描述】:
我的头文件中有一个自定义地图
class Tramway
{
private:
using stations = std::vector <std::string>;
using Tramlines = std::map <std::string, stations>;
...../
我正在尝试对唯一值进行排序,但到目前为止,我的方法是给我编译错误。 这是我的代码。
void Tramway::print_stations(const Tramway::Tramlines &tramlines)
{
for(auto map_iter = tramlines.cbegin(); map_iter != tramlines.cend(); ++map_iter)
{
std::unique(map_iter->second.cbegin(), map_iter->second.cend());
std::sort(map_iter->second.begin(), map_iter->second.end());
for( auto vec_iter = map_iter->second.cbegin() ; vec_iter != map_iter->second.cend() ; ++vec_iter )
std::cout << *vec_iter << std::endl;
}
}
有没有办法同时获取唯一值并对其进行排序?我试过std::sort(std::unique(..,..)) 但std::sort() 需要两个参数才能工作。
以下是我不断遇到的错误
x86_64-w64-mingw32\7.3.0\include\c++\bits\stl_algobase.h:148: error: no matching function for call to 'swap(const std::__cxx11::basic_string<char>&, const std::__cxx11::basic_string<char>&)'
swap(*__a, *__b);
~~~~^~~~~~~~~~~~
x86_64-w64-mingw32\7.3.0\include\c++\bits\stl_algo.h:975: error: passing 'const std::__cxx11::basic_string<char>' as 'this' argument discards qualifiers [-fpermissive]
*++__dest = _GLIBCXX_MOVE(*__first);
^
x86_64-w64-mingw32\7.3.0\include\c++\bits\stl_algo.h:1852: error: passing 'const std::__cxx11::basic_string<char>' as 'this' argument discards qualifiers [-fpermissive]
*__first = _GLIBCXX_MOVE(__val);
^
x86_64-w64-mingw32\7.3.0\include\c++\bits\stl_heap.h:252: error: passing 'const std::__cxx11::basic_string<char>' as 'this' argument discards qualifiers [-fpermissive]
*__result = _GLIBCXX_MOVE(*__first);
^
x86_64-w64-mingw32\7.3.0\include\c++\bits\move.h:187: error: no type named 'type' in 'struct std::enable_if<false, void>'
86_64-w64-mingw32\7.3.0\include\c++\bits\stl_heap.h:225: error: passing 'const std::__cxx11::basic_string<char>' as 'this' argument discards qualifiers [-fpermissive]
*(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first + __secondChild));
^
86_64-w64-mingw32\7.3.0\include\c++\bits\stl_heap.h:231: error: passing 'const std::__cxx11::basic_string<char>' as 'this' argument discards qualifiers [-fpermissive]
*(__first + __holeIndex) = _GLIBCXX_MOVE(*(__first
^
x86_64-w64-mingw32\7.3.0\include\c++\bits\stl_algobase.h:548: error: passing 'const std::__cxx11::basic_string<char>' as 'this' argument discards qualifiers [-fpermissive]
*--__result = std::move(*--__last);
~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
【问题讨论】:
-
你应该在调用 std::unique (see this page) 之后调用erase。还有
but so far my approach is giving me compile errors你忘了包括编译器错误。 -
std::unique 只删除连续的重复项,使容器尾部处于未确定状态
-
@Borgleader 我添加了编译器错误。
-
std::set是一个有序的、唯一的集合。将数据结构从std::vector更改为这样会避免首先重新排列吗?
标签: c++ dictionary c++11 vector