Top.Mail.Ru
Ответы

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

Аватар пользователя
Искусственный интеллект
123456789101112
 #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'; 
} 
Аватар пользователя
Мудрец
1234567891011121314151617181920
 #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 -- пропускать

Аватар пользователя
Мастер
12345678910111213141516171819202122232425
 #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; 
}