এসটিডি :: কী স্টোর অবজেক্টসকে স্মৃতিতে স্বচ্ছন্দভাবে সেট করে?


16

সংক্ষিপ্ত std::setস্মৃতিতে বস্তুগুলি std::vectorকী পছন্দ করে ?

আমি ওয়েবে এটি সন্ধান করতে পারিনি, সিপ্রেফারেন্স মেমরি বরাদ্দের বিবরণ উল্লেখ করে না। তবে আমি দেখতে পাচ্ছি না কেন এটি সংক্ষিপ্ত স্মৃতি ব্যবহার করতে পারে না, তাই আমার প্রশ্ন।


5
set::insertপ্রয়োজনীয়তাগুলি পড়ুন : en.cppreferences.com/w/cpp/container/set/insert "... কোনও পুনরাবৃত্তকারী বা রেফারেন্স অবৈধ নয় ...." সুতরাং যখন এটির মতো প্রসারিত করার দরকার হয় তখন তা পুনরায় প্রকাশ করতে পারে না std::vector।
— রিচার্ড ক্রিটেন

পারফরম্যান্স: আপনার ব্যবহারের ক্ষেত্রে আপনার পরিমাপ (আপনার হ্যাশিং ফাংশনের উপর নির্ভর করে) দরকার: দেখুন চ্যানেল 9.msdn.com/Events/Build/2014/2-661 45:48
— রিচার্ড ক্রিটেন


1
আপনি কি সেটাকে "সংঘটিত" হিসাবে বোঝাচ্ছেন যেমন "সেটটি পুনরাবৃত্তি হওয়ার সাথে সাথে অবজেক্টগুলি একটি স্মৃতিযুক্ত স্থানে সংরক্ষণ করা হয়", বা "সমস্ত বস্তু একটি বড় মেমরির মধ্যে সংরক্ষণ করা হয় (তবে স্বেচ্ছামূলকভাবে)"?
— পাবলো এইচ

1
সাধারণত, আপনি যখন নিজেকে জিজ্ঞাসা করছেন "ধারক এ হ'ল কনটেইনার বি এর সমান, উত্তরটি" না ", অন্যথায় কেবল ধারক এ থাকবে (কারণ ধারক বি থাকার উদ্দেশ্য কী হবে?) এটি অবশ্যই ধারক অ্যাডাপ্টারের ক্ষেত্রে প্রযোজ্য নয় , তবে std::setসেগুলির মধ্যে একটি নয় যা এখানে মূল key
— অরবিটে লাইটনেস রেস

উত্তর:


25

এসটিডি :: কী স্ট্যান্ড :: ভেক্টর এর মতো স্বচ্ছ মেমরিতে স্টোর অবজেক্টস সেট করে?

এটি যে কোনও গ্যারান্টি নেই। অনুশীলনেও, এটি ধারকটির প্রয়োজনীয়তার কারণে পারে না। অতএব না, এটি স্থির স্মৃতিতে বস্তুগুলি সঞ্চয় করে না।

কেন এটি স্বচ্ছ স্মৃতি ব্যবহার করতে পারছে না তা আমি দেখতে পাচ্ছি না

সেটের উপাদানগুলির উল্লেখগুলি অবশ্যই মুছে ফেলার পাশাপাশি এটি সন্নিবেশ করার সময় বৈধ থাকতে হবে (মুছে ফেলা উপাদানগুলির উল্লেখ ব্যতীত)। এই প্রয়োজনীয়তা সামঞ্জস্যপূর্ণ মেমরির সাথে বেমানান।

আমি যতদূর জানি, একটি ভারসাম্যযুক্ত অনুসন্ধান ট্রি হ'ল একমাত্র ডেটা স্ট্রাকচার যা প্রয়োগ করতে পারে std::set।


এটি ওপি বলতে বোঝাতে চাইলে বড় আকারের টুকরো টুকরো করে গাছের নোডের জন্য জায়গা তৈরি করতে পারে। (তবে কোনও পুনরুক্তিযোগ্য অবৈধকরণ insertসমস্ত নোডকে কেবলমাত্র একটি বৃহত ব্লকে সীমাবদ্ধ করার জন্য কেবলমাত্র একটি ব্লকের মধ্যে সীমাবদ্ধ রাখার বিধান দেয় না, যদি স্থানটিতে রিলোক ব্যর্থ হয় বা (সি ++ এর জন্য আদর্শ) বরাদ্দকারী এই ধরনের পুনঃস্থাপন সমর্থন করে না))
— পিটার কর্ডেস

15

এটি স্পষ্টভাবে বাদ দেওয়া যায় না, যদিও নির্দিষ্ট কিছু সীমাবদ্ধতাগুলি std::setজটিল স্মৃতি ব্যবহার করা অসম্ভব করে তোলে।

উদাহরণস্বরূপ, set::insertলোগারিদমিক জটিলতা রয়েছে যখন এর প্রবেশপদগুলি সাফল্যের vector::insertজন্য রৈখিক জটিলতার প্রয়োজন হয়। এছাড়াও set::insertiterators বাতিল করে না। উভয় প্রয়োজনীয়তা সংশ্লেষপূর্ণ স্মৃতি দিয়ে উপলব্ধি করা যায় না।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.