• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

find na pair set

Cloud VPS
0 głosów
159 wizyt
pytanie zadane 11 października 2020 w C i C++ przez TlenekWodoru Użytkownik (520 p.)

Otóż ja chciałbym, by na pair secie użyć find, ale w taki sposób, by szukać względem elementu first, ale  żeby program wypisał element second. Bo np. jak chcę wyciągnąć .begin() to mogę to zrobić za pomocą:

cout<<S.begin()->second;  

A czy da się zrobić to samo tylko z findem? Jeśli tak to co mam wpisać?  

#include <iostream>
#include <set>
using namespace std;

set<pair<int,int>>S;  
int main()
{
    S.insert({1,11});
    S.insert({2,22});
    S.insert({3,33});
    S.insert({4,44});
    S.insert({5,55});
    cout<<*S.find(5)->second; 
    /// Tutaj chcialbym by znalazl
    /// element 5 w secie first i wypiasal 
    /// jego element second, w tym przypadku 55.
    return 0;
}

 

1 odpowiedź

+1 głos
odpowiedź 11 października 2020 przez NewEraOfPeace Gaduła (4,790 p.)
wybrane 11 października 2020 przez TlenekWodoru
 
Najlepsza
#include <iostream>
#include <algorithm>
#include <set>
#include <utility>

int main(){
	std::set<std::pair<int, int>> S;

	S.emplace(1,11);
    S.emplace(2,22);
    S.emplace(3,33);
    S.emplace(4,44);
    S.emplace(5,55);
	
	auto it = std::find_if(std::begin(S), std::end(S), [](auto pair){return 5==pair.first;});

	std::cout<<it->first<<'\t'<<it->second;
}

Użyj funkcji find_if, a nie find. find_if nie szuka konkretnej wartości tak jak find, tylko sprawdza odpowiedni(e) warunek/ki dla każdego elementu

 

komentarz 11 października 2020 przez adrian17 Mentor (354,180 p.)

Tylko dodam jako ciekawostkę, że od C++20 (na razie dostępne tylko w GCC 10) można powiedzieć std::find żeby "szukał 5 w first":

using Para = std::pair<int, int>;
std::set<Para> S;

// oryginal
auto it = std::find_if(std::begin(S), std::end(S), [](auto pair){return 5==pair.first;});
// krocej w C++20:
auto it = std::ranges::find_if(S, [](auto pair){return 5==pair.first;});
// z find:
auto it = std::ranges::find(S, 5, &Para::first);

 

Podobne pytania

0 głosów
1 odpowiedź 197 wizyt
pytanie zadane 3 sierpnia 2020 w C i C++ przez TlenekWodoru Użytkownik (520 p.)
0 głosów
1 odpowiedź 153 wizyt
pytanie zadane 8 sierpnia 2020 w C i C++ przez TlenekWodoru Użytkownik (520 p.)
+1 głos
1 odpowiedź 634 wizyt

93,469 zapytań

142,404 odpowiedzi

322,716 komentarzy

62,852 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...