11.10 Sorted-Range Algorithms
Searching First or Last Possible Position
ForwardIterator
lower_bound (ForwardIterator beg, ForwardIterator end, const T& value)
ForwardIterator
lower_bound (ForwardIterator beg, ForwardIterator end, const T& value,
BinaryPredicate op)
ForwardIterator
upper_bound (ForwardIterator beg, ForwardIterator end, const T& value)
ForwardIterator
upper_bound (ForwardIterator beg, ForwardIterator end, const T& value,
BinaryPredicate op)
• lower_bound() returns the position of the first element that has a value equal to or greater than
value. This is the first position where an element with value value could get inserted without
breaking the sorting of the range [beg,end).
• upper_bound() returns the position of the first element that has a value greater than value. This
is the last position where an element with value value could get inserted without breaking the
sorting of the range [beg,end).
• All algorithms return end if there is no such value.
• op is an optional binary predicate to be used as the sorting criterion:
op (elem1 ,elem2)
• The caller has to ensure that the ranges are sorted according to the sorting criterion on entry.
• To obtain the result from both lower_bound() and upper_bound(), use equal_range(),
which returns both (see the next algorithm).
• Associative containers provide equivalent member functions that provide better performance (see
Section 8.3.3, page 405).
• Complexity: logarithmic for random-access iterators, linear otherwise (at most, log(numElems)
+ 1 comparisons; but for other than random-access iterators, the number of operations to step
through the elements is linear, making the total complexity linear).
The following program demonstrates how to use lower_bound() and upper_bound():
// algo/bounds1.cpp
#include "algostuff.hpp"
using namespace std;
int main()
{
list coll;
11.10 อัลกอริทึม Sorted ช่วง
ค้นแรกหรือตำแหน่งสุดท้ายได้
ForwardIterator
lower_bound (ForwardIterator วอน สิ้นสุด ForwardIterator, T& ค่า const ค่า)
ForwardIterator
lower_bound (ForwardIterator วอน สิ้นสุด ForwardIterator ค่า const ค่า T&,
BinaryPredicate op)
ForwardIterator
upper_bound (ForwardIterator วอน สิ้นสุด ForwardIterator, T& ค่า const ค่า)
ForwardIterator
upper_bound (ForwardIterator วอน สิ้นสุด ForwardIterator ค่า const ค่า T&,
BinaryPredicate op)
• lower_bound() ส่งกลับค่าตำแหน่งขององค์ประกอบ first ที่มีค่าเท่ากับ หรือมากกว่า
ค่า นี้คือตำแหน่ง first ที่องค์ประกอบที่ มีค่าค่าสามารถรับแทรกโดย
แบ่งเรียงลำดับช่วง [วอน จบ)
• upper_bound() ส่งกลับค่าตำแหน่งขององค์ประกอบ first ที่มีค่ามากกว่าค่า นี้
คือตำแหน่งสุดท้ายที่องค์ประกอบที่ มีค่าค่าสามารถรับแทรก โดยแบ่งการ
เรียงลำดับช่วง [วอน จบ)
•อัลกอริทึมทั้งหมดกลับสิ้นสุดไม่มีค่าดังกล่าวไม่
• op เป็นเพรดิเคตไบนารีตัวเลือกที่จะใช้เป็นเงื่อนไขการเรียงลำดับ:
op (elem1, elem2)
•ผู้เรียกเพื่อให้แน่ใจว่า ช่วงจะเรียงลำดับตามเงื่อนไขการเรียงลำดับในรายการได้
•รับผลจาก lower_bound() และ upper_bound(), equal_range() ใช้,
ที่ส่งคืนทั้งสอง (ดูอัลกอริทึมต่อไป)
เก็บเกี่ยวข้อง•มีฟังก์ชันสมาชิกเท่าที่มีประสิทธิภาพ (ดู
ส่วน 8.3.3 หน้า 405)
•ความซับซ้อน: ลอการิทึมสำหรับการเข้าถึงแบบสุ่ม iterators เส้นอื่น (มากที่สุด log(numElems)
เปรียบเทียบ 1 แต่อื่น ๆ กว่าสุ่มเข้า iterators หมายเลขการดำเนินงานเพื่อ
ผ่านองค์ประกอบไม่เชิงเส้น ทำซับซ้อนรวมเชิงเส้น)
โปรแกรมต่อไปนี้สาธิตวิธีการใช้ lower_bound() และ upper_bound():
/ / algo/bounds1.cpp
#include "algostuff.hpp"
ใช้ namespace มาตรฐาน
int main()
{
รายการ < int > coll;
การแปล กรุณารอสักครู่..
11.10 เรียงตามระดับขั้นตอนวิธีการค้นหาเป็นครั้งแรกหรือครั้งล่าสุดที่เป็นไปได้ตำแหน่งForwardIterator LOWER_BOUND (ForwardIterator ขอ, ForwardIterator สิ้นสุด const T & ค่า) ForwardIterator LOWER_BOUND (ForwardIterator ขอ, ForwardIterator สิ้นสุด const T & ค่าBinaryPredicate op) ForwardIterator UPPER_BOUND (ForwardIterator ขอ, ForwardIterator สิ้นสุด const T & ค่า) ForwardIterator UPPER_BOUND (ForwardIterator ขอ, ForwardIterator สิ้นสุด const T & ค่าBinaryPredicate op) • LOWER_BOUND () กลับตำแหน่งขององค์ประกอบแรกที่มีค่าเท่ากับหรือสูงกว่าค่า นี้เป็นตำแหน่งแรกที่องค์ประกอบที่มีมูลค่าค่าจะได้รับการแทรกโดยไม่ต้องทำลายการเรียงลำดับของช่วง [ขอจบ) • UPPER_BOUND () กลับตำแหน่งขององค์ประกอบแรกที่มีค่ามากกว่าค่า นี้เป็นตำแหน่งสุดท้ายที่องค์ประกอบที่มีมูลค่าค่าจะได้รับการแทรกโดยไม่ทำลายการเรียงลำดับของช่วง [ขอจบ) •ขั้นตอนวิธีการทั้งหมดกลับมาในตอนท้ายถ้าไม่มีค่าเช่น•สหกรณ์เป็นคำกริยาไบนารีตัวเลือกที่จะใช้เป็น เกณฑ์การเรียงลำดับ: op (elem1, elem2) •โทรมีเพื่อให้แน่ใจว่าช่วงที่จะถูกจัดเรียงตามเกณฑ์การเรียงลำดับที่รายการ•หากต้องการได้รับผลจากทั้ง LOWER_BOUND () และ UPPER_BOUND () ใช้ equal_range () ซึ่ง ผลตอบแทนที่ทั้งสอง (ดูขั้นตอนถัดไป) บรรจุอยู่ร่วม•ให้การทำงานเทียบเท่าสมาชิกที่ให้ประสิทธิภาพที่ดีขึ้น (ดูมาตรา 8.3.3, หน้า 405) •ซับซ้อน: ลอการิทึมเพื่อ iterators random-access เชิงเส้นอย่างอื่น (ที่ส่วนใหญ่เข้าสู่ระบบ (numElems ) + 1 การเปรียบเทียบ แต่อื่น ๆ กว่า iterators random-access, จำนวนของการดำเนินงานที่จะก้าวผ่านองค์ประกอบเป็นเส้นตรงทำให้เส้นความซับซ้อนรวม) โปรแกรมต่อไปนี้แสดงให้เห็นถึงวิธีการใช้ LOWER_BOUND () และ UPPER_BOUND () / / algo/bounds1.cpp # include "algostuff.hpp" โดยใช้ namespace std; int หลัก () { รายการ
Coll;
การแปล กรุณารอสักครู่..