在另一个主题中,我试图解决这个问题.问题是从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) 我是c ++的新手并且遇到了问题.我正在使用列表来存储字符串值.现在我想从该字符串中删除重复的值.谁能告诉我这是怎么做到的.
任何示例代码都将非常感激.
我有一些指针列表
std::list<Person*> persons;
Run Code Online (Sandbox Code Playgroud)
填写期间此列表中有重复项.如何删除重复项并保留列表中唯一的指针?
我发现list::unique()只删除列表中的连续元素.我想知道该方法的功能是这样的.
从列表中删除重复项说明如何从列表中删除重复元素,但它不解释为什么只删除连续元素.
以下是我的测试代码:
#include <algorithm>
#include <iostream>
#include <list>
#include <string>
#include <utility>
using namespace std;
void print_message( const pair<int,string>& message )
{
cout << message.first << " - " << message.second << endl;
}
int main( )
{
list< pair< int, string > > message;
list< pair< int, string > >::iterator ip;
message.push_back( make_pair( 1, string("Test Foo One")) );
message.push_back( make_pair( 1, string("Test Foo Two")) );
message.push_back( make_pair( 1, string("Test Foo Two")) );
message.push_back( …Run Code Online (Sandbox Code Playgroud)