Giriş
Şu satırı dahil ederiz.
std::pair ve std::tuple birbirlerine çok benziyorlar ancak std::tuple<A,B> ile std::pair<A,B> farklı tiplerdir.
std::pair ve std::tuple STL ile mecburen kullanılıyor çünkü algoritmaların genel (generic) olması gerekiyor. Kendi kodumda ise, std::pair ve std::tuple yerine daha anlamlı struct veya class'lar kullanmayı tercih ediyorum.
Default constructor
std::pair verilen tiplerin default constructor'larını çağırır. Şu kod derlenmez.
Constructor
Çevrim (Conversion) olmasına imkan tanır. İmzası şöyledir.
< operator
std::pair < operatörünü overload eder. Önce firt elemanı karşılaştırır. Eğer aynı ise second elemanı karşılaştırır. Dolayısıyla sort algoritmalarında kullanılabilir. Örnek:
std::pair trival değildir. Şöyle yaparız
Şu satırı dahil ederiz.
#include <utility>
std::pair getFirst(), getSecond() gibi metodlar sunmaz. Bunun yerine first ve second isimli iki alan sunar. Ya da std::get ile kullanılabilir.std::pair ve std::tuple birbirlerine çok benziyorlar ancak std::tuple<A,B> ile std::pair<A,B> farklı tiplerdir.
std::pair ve std::tuple STL ile mecburen kullanılıyor çünkü algoritmaların genel (generic) olması gerekiyor. Kendi kodumda ise, std::pair ve std::tuple yerine daha anlamlı struct veya class'lar kullanmayı tercih ediyorum.
Default constructor
std::pair verilen tiplerin default constructor'larını çağırır. Şu kod derlenmez.
class A
{
public:
A (int a) {};
};
std::pair<std::string, A> p;
Constructor
Çevrim (Conversion) olmasına imkan tanır. İmzası şöyledir.
template< class U1, class U2 >
pair( const pair<U1, U2>& p );
Açıklaması şöyle4) Initializes first with p.first and second with p.second.
int tipindeki pair'den float tipine dönüşüm olmasına imkan tanır. Şöyle kullanabiliriz.
template<typename type>
using point = std::pair<type, type>;
float dist(point<float> a, point<float> b)
{
return pow(pow(a.first-b.first, 2) + pow(a.second - b.second, 2), 0.5);
}
int main() {
std::cout << dist(point<int>{ 0, 0 }, point<int>{ 1, 1 });
return 0;
}
< operator
std::pair < operatörünü overload eder. Önce firt elemanı karşılaştırır. Eğer aynı ise second elemanı karşılaştırır. Dolayısıyla sort algoritmalarında kullanılabilir. Örnek:
std::vector<std::pair<std::string, bool> > v;
std::sort(v.begin(), v.end());
is_trivialstd::pair trival değildir. Şöyle yaparız
std::cout << std::is_trivial<std::pair<int, int>>::value << std::endl;Çıktı olarak şunu alırız.
0
is_trivially_copyable
std::pair trivally copyable değildir. Şöyle yaparızstd::cout << std::is_trivially_copyable<std::pair<int, int>>::value << std::endl;Çıktı olarak şunu alırız.
0
Hiç yorum yok:
Yorum Gönder