the actual position of a given value in the dynamic array
most likely this is what you need in codes, using this data structure, it first does the binary search on the sorted values with sortposofval_label and then returns the looked up position in the original unsorted array, which corresponds to the position returned by the append routine.
Type | Intent | Optional | Attributes | Name | ||
---|---|---|---|---|---|---|
type(dyn_labelarray_type), | intent(in) | :: | me | |||
character(len=*), | intent(in) | :: | val | |||
logical, | intent(in), | optional | :: | nextifnotfound |
flag to indicate, if the position of the next entry in the sorted list should be returned instead, if val is not found. |
|
integer, | intent(in), | optional | :: | lower | ||
integer, | intent(in), | optional | :: | upper |
function posofval_label(me, val, nextifnotfound, lower, upper) result(pos)
!------------------------------------------------------------------------
type(dyn_labelarray_type), intent(in) :: me !< dynamic array
character(len=*), intent(in) :: val !< value to search for
!> flag to indicate, if the position of the next entry in the sorted
!! list should be returned instead, if val is not found.
logical, intent(in), optional :: nextifnotfound
integer, intent(in), optional :: lower !< lower search limit
integer, intent(in), optional :: upper !< upper search limit
integer :: pos !< position in the array of the searche value, 0 if not found
!------------------------------------------------------------------------
integer :: sortpos
integer :: lb, ub
!------------------------------------------------------------------------
lb = 1
ub = me%nvals
if( present( lower ) ) lb = lower
if( present( upper ) ) ub = upper
sortpos = sortedposofval(me, val, nextifnotfound, lb, ub)
! if result (sorted pos)
if ((sortpos <= me%nvals) .and. (sortpos > 0)) then
pos = me%sorted(sortpos)
else
pos = sortpos
end if
end function posofval_label