C++ set. не работает reverse. Желаю ввести некоторые имена и вывести их в обратном порядке без повторений так как set
Желаю ввести некоторые имена и вывести их в обратном порядке без повторений, но программа не выводит ничего. В чем может быть проблема?
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <set>
#include <bits/stdc++.h>
using namespace std;
int main(){
int n;
cin >> n;
vector<string> v1;
vector<string> v2;
vector<string>:: reverse_iterator rit;
string sms;
for(int i = 0; i < n; i++){
cin >> sms;
}
set <string> v1s (v1.begin(), v1.end());
set_union (v1s.begin (), v1s.end (), v1s.begin (), v1s.end (), back_inserter (v2));
for (rit = v2.rbegin(); rit != v2.rend(); rit++)
cout << *rit << " ";
return 0;
}
в v1 ничего не добавляется, всё читается в бесполезную переменную sms
алсо, я не понимаю, в чём здесь смысл использовать set_union
#include <iostream>
#include <set>
#include <string>
using namespace std;
int main() {
set<string> words{ "one", "two", "three", "four", "five", "six", "seven" };
for (const auto& word : words) cout << word << '\n';
puts("");
set<string, greater<>> rev;
for (const auto& word : words) rev.insert(word);
for (const auto& word : rev) cout << word << '\n';
} #include <iostream>
#include <set>
#include <vector>
int main()
{
std::vector<std::set<std::string>::const_iterator> names_list;
std::set<std::string> name_base;
size_t n;
std::string tmp;
std::cin >> n;
for (auto i = 0; i < n; i++)
{
std::cin >> tmp;
auto insert = name_base.insert(tmp);
if (insert.second) names_list.push_back(insert.first);
}
for (auto it = names_list.rbegin(); it != names_list.rend(); it++)
std::cout << **it << std::endl;
} все имена хранятся в set
порядок их вывода (в виде указателей на имена в сете) хранится в векторе
если цель вывести уникальные значения, но сохранить порядок ввода (или перевернуть), можно параллельно с v1 хранить в set уникальные значения. если введенное слово уже есть в set -- пропускать
#include <iostream>
#include <set>
using namespace std;
int main(){
int n;
set<string> a;
string s;
cout << "Input number of names: ";
cin >> n;
cout << "Input names themselves:\n";
for(int i = 0; i < n; i++){
cin >> s;
a.insert(s);
}
auto ia = a.rbegin();
cout << "Unique names in the set reverse order:\n";
while(*ia != *a.begin()){
cout << *ia << " ";
++ia;
}
cout << *ia;
}