在另一个主题中,我试图解决这个问题.问题是从a中删除重复的字符std::string.
std::string s= "saaangeetha";
Run Code Online (Sandbox Code Playgroud)
由于订单并不重要,所以我s先排序,然后使用std::unique并最终调整大小以获得所需的结果:
aeghnst
Run Code Online (Sandbox Code Playgroud)
那是正确的!
现在我想做同样的事,但同时我希望字符的顺序完好无损.意思是,我想要这个输出:
sangeth
Run Code Online (Sandbox Code Playgroud)
所以我写了这个:
template<typename T>
struct is_repeated
{
std::set<T> unique;
bool operator()(T c) { return !unique.insert(c).second; }
};
int main() {
std::string s= "saaangeetha";
s.erase(std::remove_if(s.begin(), s.end(), is_repeated<char>()), s.end());
std::cout << s ;
}
Run Code Online (Sandbox Code Playgroud)
这给出了这个输出:
saangeth
Run Code Online (Sandbox Code Playgroud)
也就是说,a重复,但其他重复已经消失.代码有什么问题?
无论如何我改变了我的代码 :(见评论)
template<typename T>
struct is_repeated
{
std::set<T> & unique; //made reference!
is_repeated(std::set<T> &s) : unique(s) {} //added line!
bool …Run Code Online (Sandbox Code Playgroud)