Харитани қисқартириш бу катта ҳажмдаги маълумотларни фойдали умумлаштирилган натижаларга тўплаш учун маълумотларни қайта ишлаш парадигмаси


Download 80.3 Kb.
bet3/3
Sana31.01.2023
Hajmi80.3 Kb.
#1142273
1   2   3
Bog'liq
Харитани қисқартириш

QList images = ...;
QFuture bgrImages = QtConcurrent::mapped(images,
static_cast(&QImage::rgbSwapped));
// Create a set of the lengths of all strings in a list.
QStringList strings = ...;
QFuture> wordLengths = QtConcurrent::mappedReduced(strings, &QString::length,
qOverload(&QSet::insert));
qOverload dan foydalanishga e'tibor bering . Bir nechta ortiqcha yuklarga ega bo'lgan usullar uchun noaniqlikni hal qilish kerak. Shuni ham yodda tutingki, QtConcurrent::mappedReduced() dan foydalanganda siz oddiy va a'zo funktsiyalardan foydalanishni erkin aralashtirishingiz mumkin:
// Oddiy funktsiyalar va a'zo funktsiyalarni QtConcurrent::mappedReduced() bilan aralashtirishi mumkin.
extern void computeAverage(int &average, int length);
QStringList strings = ...;
QFuture averageWordLength = QtConcurrent::mappedReduced(strings, &QString::length, computeAverage);
// Ro'yxatdagi barcha tasvirlarning rang taqsimoti to'plamini yarating..
extern int colorDistribution(const QImage &string);
QList images = ...;
QFuture> totalColorDistribution = QtConcurrent::mappedReduced (images, colorDistribution,
qOverload(&QSet::insert));
Funktsiya obyektlaridan foydalanish quyidagicha amalga oshiriladi:
QtConcurrent::map(), QtConcurrent::mapped() va QtConcurrent::mappedReduced() xarita funksiyasi uchun funksiya obyektlarini qabul qiladi. Ushbu funktsiya obyektlari funktsiya chaqiruviga holat qo'shish uchun ishlatilishi mumkin:
struct Scaled{
Scaled(int size)
: m_size(size) { }
typedef QImage result_type;
QImage operator()(const QImage &image){
return image.scaled(m_size, m_size);
}
int m_size; };
QList images = ...;
QFuture thumbnails = QtConcurrent::mapped(images, Scaled(100));
Funktsiya obyektlari kamaytirish funktsiyasi uchun ham qo'llab-quvvatlanadi:
struct ImageTransform{
void operator()(QImage &result, const QImage &value);
};
QFuture thumbNails =
QtConcurrent::mappedReduced(images, Scaled(100), ImageTransform(),
QtConcurrent::SequentialReduce);
Lambda ifodalaridan foydalanish quyidagicha amalga oshiriladi:
QtConcurrent::map(), QtConcurrent::mapped() va QtConcurrent::mappedReduced() xarita uchun lambda ifodalarini qabul qiladi va funksiyani qisqartiradi:
QList vector { 1, 2, 3, 4 };
QtConcurrent::blockingMap(vector, [](int &x) { x *= 2; });
int size = 100;
QList images = ...;
QList thumbnails = QtConcurrent::mapped(images,
[&size](const QImage &image) {
return image.scaled(size, size);
}
).results();
QtConcurrent::mappedReduced() yoki QtConcurrent::blockingMappedReduced() dan foydalanganda siz oddiy funksiyalardan, a’zo funksiyalardan va lambda ifodalaridan foydalanishni erkin aralashtirishingiz mumkin.
QList collage = QtConcurrent::mappedReduced(images,
[&size](const QImage &image) {
return image.scaled(size, size); },
addToCollage
).results();
Bir nechta argumentlarni o'z ichiga olgan o'rash funktsiyalari quyidagicha amalaga oshiriladi: Agar siz bir nechta argumentni oladigan xarita funksiyasidan foydalanmoqchi bo'lsangiz, lambda funksiyasidan foydalanishingiz yoki std::bind()uni bitta argumentni oladigan funktsiyaga aylantirishingiz mumkin. Misol sifatida biz QImage::scaledToWidth() dan foydalaniladi:
QImage QImage :: scaledToWidth ( int width , Qt :: TransformationMode ) const ;
scaledToWidth uchta argumentni oladi (shu jumladan "bu" ko'rsatgich) va to'g'ridan-to'g'ri QtConcurrent::mapped() bilan ishlatib bo'lmaydi, chunki QtConcurrent::mapped() bitta argumentni oladigan funktsiyani kutadi. QImage::scaledToWidth() ni QtConcurrent::mapped() bilan ishlatish uchun biz kenglik va transformatsiya rejimi uchun qiymat berishimiz kerak :
QList images = ...;
std::function scale = [](const QImage &img) {
return img.scaledToWidth(100, Qt::SmoothTransformation);};
QFuture thumbnails = QtConcurrent::mapped(images, scale);
Download 80.3 Kb.

Do'stlaringiz bilan baham:
1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling